package de.sabram.upb.specs.parser.antlr.internal; 

import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import de.sabram.upb.specs.services.LidoGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("all")
public class InternalLidoParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_STRING", "RULE_INT", "RULE_EXT_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "';'", "'TERM'", "':'", "'TREE'", "'CLASS'", "'SYMBOL'", "','", "'SYNT'", "'INH'", "'ATTR'", "'CHAIN'", "'RULE'", "'END'", "'::='", "'LISTOF'", "'|'", "'$'", "'COMPUTE'", "'BOTTOMUP'", "'='", "'CHAINSTART'", "'.'", "'THIS'", "'HEAD'", "'TAIL'", "'['", "']'", "'('", "')'", "'RHS'", "'DEPENDS_ON'", "'<-'", "'UNTIL'", "'ITERATE'", "'INCLUDING'", "'CONSTITUENTS'", "'WITH'", "'SHIELD'", "'INHERITS'"
    };
    public static final int RULE_ID=4;
    public static final int RULE_EXT_INT=7;
    public static final int T__29=29;
    public static final int T__28=28;
    public static final int T__27=27;
    public static final int T__26=26;
    public static final int T__25=25;
    public static final int T__24=24;
    public static final int T__23=23;
    public static final int T__22=22;
    public static final int RULE_ANY_OTHER=11;
    public static final int T__21=21;
    public static final int T__20=20;
    public static final int EOF=-1;
    public static final int T__19=19;
    public static final int T__16=16;
    public static final int T__15=15;
    public static final int T__18=18;
    public static final int T__17=17;
    public static final int T__12=12;
    public static final int T__14=14;
    public static final int T__13=13;
    public static final int RULE_INT=6;
    public static final int T__50=50;
    public static final int T__42=42;
    public static final int T__43=43;
    public static final int T__40=40;
    public static final int T__41=41;
    public static final int T__46=46;
    public static final int T__47=47;
    public static final int T__44=44;
    public static final int T__45=45;
    public static final int T__48=48;
    public static final int T__49=49;
    public static final int RULE_SL_COMMENT=9;
    public static final int RULE_ML_COMMENT=8;
    public static final int T__30=30;
    public static final int T__31=31;
    public static final int RULE_STRING=5;
    public static final int T__32=32;
    public static final int T__33=33;
    public static final int T__34=34;
    public static final int T__35=35;
    public static final int T__36=36;
    public static final int T__37=37;
    public static final int T__38=38;
    public static final int T__39=39;
    public static final int RULE_WS=10;

    // delegates
    // delegators


        public InternalLidoParser(TokenStream input) {
            this(input, new RecognizerSharedState());
        }
        public InternalLidoParser(TokenStream input, RecognizerSharedState state) {
            super(input, state);
             
        }
        

    public String[] getTokenNames() { return InternalLidoParser.tokenNames; }
    public String getGrammarFileName() { return "../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g"; }



     	private LidoGrammarAccess grammarAccess;
     	
        public InternalLidoParser(TokenStream input, LidoGrammarAccess grammarAccess) {
            this(input);
            this.grammarAccess = grammarAccess;
            registerRules(grammarAccess.getGrammar());
        }
        
        @Override
        protected String getFirstRuleName() {
        	return "AttributeGrammar";	
       	}
       	
       	@Override
       	protected LidoGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}



    // $ANTLR start "entryRuleAttributeGrammar"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:67:1: entryRuleAttributeGrammar returns [EObject current=null] : iv_ruleAttributeGrammar= ruleAttributeGrammar EOF ;
    public final EObject entryRuleAttributeGrammar() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAttributeGrammar = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:68:2: (iv_ruleAttributeGrammar= ruleAttributeGrammar EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:69:2: iv_ruleAttributeGrammar= ruleAttributeGrammar EOF
            {
             newCompositeNode(grammarAccess.getAttributeGrammarRule()); 
            pushFollow(FOLLOW_ruleAttributeGrammar_in_entryRuleAttributeGrammar75);
            iv_ruleAttributeGrammar=ruleAttributeGrammar();

            state._fsp--;

             current =iv_ruleAttributeGrammar; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAttributeGrammar85); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAttributeGrammar"


    // $ANTLR start "ruleAttributeGrammar"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:76:1: ruleAttributeGrammar returns [EObject current=null] : ( (lv_specifications_0_0= ruleSpecifications ) )* ;
    public final EObject ruleAttributeGrammar() throws RecognitionException {
        EObject current = null;

        EObject lv_specifications_0_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:79:28: ( ( (lv_specifications_0_0= ruleSpecifications ) )* )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:80:1: ( (lv_specifications_0_0= ruleSpecifications ) )*
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:80:1: ( (lv_specifications_0_0= ruleSpecifications ) )*
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

                if ( (LA1_0==13||(LA1_0>=15 && LA1_0<=17)||(LA1_0>=21 && LA1_0<=23)) ) {
                    alt1=1;
                }


                switch (alt1) {
            	case 1 :
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:81:1: (lv_specifications_0_0= ruleSpecifications )
            	    {
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:81:1: (lv_specifications_0_0= ruleSpecifications )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:82:3: lv_specifications_0_0= ruleSpecifications
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getAttributeGrammarAccess().getSpecificationsSpecificationsParserRuleCall_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleSpecifications_in_ruleAttributeGrammar130);
            	    lv_specifications_0_0=ruleSpecifications();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getAttributeGrammarRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"specifications",
            	            		lv_specifications_0_0, 
            	            		"Specifications");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop1;
                }
            } while (true);


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAttributeGrammar"


    // $ANTLR start "entryRuleSpecifications"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:106:1: entryRuleSpecifications returns [EObject current=null] : iv_ruleSpecifications= ruleSpecifications EOF ;
    public final EObject entryRuleSpecifications() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSpecifications = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:107:2: (iv_ruleSpecifications= ruleSpecifications EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:108:2: iv_ruleSpecifications= ruleSpecifications EOF
            {
             newCompositeNode(grammarAccess.getSpecificationsRule()); 
            pushFollow(FOLLOW_ruleSpecifications_in_entryRuleSpecifications166);
            iv_ruleSpecifications=ruleSpecifications();

            state._fsp--;

             current =iv_ruleSpecifications; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleSpecifications176); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSpecifications"


    // $ANTLR start "ruleSpecifications"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:115:1: ruleSpecifications returns [EObject current=null] : (this_Specification_0= ruleSpecification otherlv_1= ';' ) ;
    public final EObject ruleSpecifications() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject this_Specification_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:118:28: ( (this_Specification_0= ruleSpecification otherlv_1= ';' ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:119:1: (this_Specification_0= ruleSpecification otherlv_1= ';' )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:119:1: (this_Specification_0= ruleSpecification otherlv_1= ';' )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:120:5: this_Specification_0= ruleSpecification otherlv_1= ';'
            {
             
                    newCompositeNode(grammarAccess.getSpecificationsAccess().getSpecificationParserRuleCall_0()); 
                
            pushFollow(FOLLOW_ruleSpecification_in_ruleSpecifications223);
            this_Specification_0=ruleSpecification();

            state._fsp--;

             
                    current = this_Specification_0; 
                    afterParserOrEnumRuleCall();
                
            otherlv_1=(Token)match(input,12,FOLLOW_12_in_ruleSpecifications234); 

                	newLeafNode(otherlv_1, grammarAccess.getSpecificationsAccess().getSemicolonKeyword_1());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSpecifications"


    // $ANTLR start "entryRuleSpecification"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:140:1: entryRuleSpecification returns [EObject current=null] : iv_ruleSpecification= ruleSpecification EOF ;
    public final EObject entryRuleSpecification() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSpecification = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:141:2: (iv_ruleSpecification= ruleSpecification EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:142:2: iv_ruleSpecification= ruleSpecification EOF
            {
             newCompositeNode(grammarAccess.getSpecificationRule()); 
            pushFollow(FOLLOW_ruleSpecification_in_entryRuleSpecification270);
            iv_ruleSpecification=ruleSpecification();

            state._fsp--;

             current =iv_ruleSpecification; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleSpecification280); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSpecification"


    // $ANTLR start "ruleSpecification"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:149:1: ruleSpecification returns [EObject current=null] : (this_TermSpec_0= ruleTermSpec | this_SymAttrSpec_1= ruleSymAttrSpec | this_AttrSpec_2= ruleAttrSpec | this_ChainSpec_3= ruleChainSpec | this_RuleSpec_4= ruleRuleSpec | this_SymCompSpec_5= ruleSymCompSpec ) ;
    public final EObject ruleSpecification() throws RecognitionException {
        EObject current = null;

        EObject this_TermSpec_0 = null;

        EObject this_SymAttrSpec_1 = null;

        EObject this_AttrSpec_2 = null;

        EObject this_ChainSpec_3 = null;

        EObject this_RuleSpec_4 = null;

        EObject this_SymCompSpec_5 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:152:28: ( (this_TermSpec_0= ruleTermSpec | this_SymAttrSpec_1= ruleSymAttrSpec | this_AttrSpec_2= ruleAttrSpec | this_ChainSpec_3= ruleChainSpec | this_RuleSpec_4= ruleRuleSpec | this_SymCompSpec_5= ruleSymCompSpec ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:153:1: (this_TermSpec_0= ruleTermSpec | this_SymAttrSpec_1= ruleSymAttrSpec | this_AttrSpec_2= ruleAttrSpec | this_ChainSpec_3= ruleChainSpec | this_RuleSpec_4= ruleRuleSpec | this_SymCompSpec_5= ruleSymCompSpec )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:153:1: (this_TermSpec_0= ruleTermSpec | this_SymAttrSpec_1= ruleSymAttrSpec | this_AttrSpec_2= ruleAttrSpec | this_ChainSpec_3= ruleChainSpec | this_RuleSpec_4= ruleRuleSpec | this_SymCompSpec_5= ruleSymCompSpec )
            int alt2=6;
            alt2 = dfa2.predict(input);
            switch (alt2) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:154:5: this_TermSpec_0= ruleTermSpec
                    {
                     
                            newCompositeNode(grammarAccess.getSpecificationAccess().getTermSpecParserRuleCall_0()); 
                        
                    pushFollow(FOLLOW_ruleTermSpec_in_ruleSpecification327);
                    this_TermSpec_0=ruleTermSpec();

                    state._fsp--;

                     
                            current = this_TermSpec_0; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 2 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:164:5: this_SymAttrSpec_1= ruleSymAttrSpec
                    {
                     
                            newCompositeNode(grammarAccess.getSpecificationAccess().getSymAttrSpecParserRuleCall_1()); 
                        
                    pushFollow(FOLLOW_ruleSymAttrSpec_in_ruleSpecification354);
                    this_SymAttrSpec_1=ruleSymAttrSpec();

                    state._fsp--;

                     
                            current = this_SymAttrSpec_1; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 3 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:174:5: this_AttrSpec_2= ruleAttrSpec
                    {
                     
                            newCompositeNode(grammarAccess.getSpecificationAccess().getAttrSpecParserRuleCall_2()); 
                        
                    pushFollow(FOLLOW_ruleAttrSpec_in_ruleSpecification381);
                    this_AttrSpec_2=ruleAttrSpec();

                    state._fsp--;

                     
                            current = this_AttrSpec_2; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 4 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:184:5: this_ChainSpec_3= ruleChainSpec
                    {
                     
                            newCompositeNode(grammarAccess.getSpecificationAccess().getChainSpecParserRuleCall_3()); 
                        
                    pushFollow(FOLLOW_ruleChainSpec_in_ruleSpecification408);
                    this_ChainSpec_3=ruleChainSpec();

                    state._fsp--;

                     
                            current = this_ChainSpec_3; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 5 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:194:5: this_RuleSpec_4= ruleRuleSpec
                    {
                     
                            newCompositeNode(grammarAccess.getSpecificationAccess().getRuleSpecParserRuleCall_4()); 
                        
                    pushFollow(FOLLOW_ruleRuleSpec_in_ruleSpecification435);
                    this_RuleSpec_4=ruleRuleSpec();

                    state._fsp--;

                     
                            current = this_RuleSpec_4; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 6 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:204:5: this_SymCompSpec_5= ruleSymCompSpec
                    {
                     
                            newCompositeNode(grammarAccess.getSpecificationAccess().getSymCompSpecParserRuleCall_5()); 
                        
                    pushFollow(FOLLOW_ruleSymCompSpec_in_ruleSpecification462);
                    this_SymCompSpec_5=ruleSymCompSpec();

                    state._fsp--;

                     
                            current = this_SymCompSpec_5; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSpecification"


    // $ANTLR start "entryRuleTermSpec"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:220:1: entryRuleTermSpec returns [EObject current=null] : iv_ruleTermSpec= ruleTermSpec EOF ;
    public final EObject entryRuleTermSpec() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTermSpec = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:221:2: (iv_ruleTermSpec= ruleTermSpec EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:222:2: iv_ruleTermSpec= ruleTermSpec EOF
            {
             newCompositeNode(grammarAccess.getTermSpecRule()); 
            pushFollow(FOLLOW_ruleTermSpec_in_entryRuleTermSpec497);
            iv_ruleTermSpec=ruleTermSpec();

            state._fsp--;

             current =iv_ruleTermSpec; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleTermSpec507); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTermSpec"


    // $ANTLR start "ruleTermSpec"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:229:1: ruleTermSpec returns [EObject current=null] : (otherlv_0= 'TERM' this_SymbolDefIds_1= ruleSymbolDefIds otherlv_2= ':' ( (lv_typeId_3_0= ruleTypeId ) ) ) ;
    public final EObject ruleTermSpec() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        EObject this_SymbolDefIds_1 = null;

        EObject lv_typeId_3_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:232:28: ( (otherlv_0= 'TERM' this_SymbolDefIds_1= ruleSymbolDefIds otherlv_2= ':' ( (lv_typeId_3_0= ruleTypeId ) ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:233:1: (otherlv_0= 'TERM' this_SymbolDefIds_1= ruleSymbolDefIds otherlv_2= ':' ( (lv_typeId_3_0= ruleTypeId ) ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:233:1: (otherlv_0= 'TERM' this_SymbolDefIds_1= ruleSymbolDefIds otherlv_2= ':' ( (lv_typeId_3_0= ruleTypeId ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:233:3: otherlv_0= 'TERM' this_SymbolDefIds_1= ruleSymbolDefIds otherlv_2= ':' ( (lv_typeId_3_0= ruleTypeId ) )
            {
            otherlv_0=(Token)match(input,13,FOLLOW_13_in_ruleTermSpec544); 

                	newLeafNode(otherlv_0, grammarAccess.getTermSpecAccess().getTERMKeyword_0());
                
             
                    newCompositeNode(grammarAccess.getTermSpecAccess().getSymbolDefIdsParserRuleCall_1()); 
                
            pushFollow(FOLLOW_ruleSymbolDefIds_in_ruleTermSpec566);
            this_SymbolDefIds_1=ruleSymbolDefIds();

            state._fsp--;

             
                    current = this_SymbolDefIds_1; 
                    afterParserOrEnumRuleCall();
                
            otherlv_2=(Token)match(input,14,FOLLOW_14_in_ruleTermSpec577); 

                	newLeafNode(otherlv_2, grammarAccess.getTermSpecAccess().getColonKeyword_2());
                
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:250:1: ( (lv_typeId_3_0= ruleTypeId ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:251:1: (lv_typeId_3_0= ruleTypeId )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:251:1: (lv_typeId_3_0= ruleTypeId )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:252:3: lv_typeId_3_0= ruleTypeId
            {
             
            	        newCompositeNode(grammarAccess.getTermSpecAccess().getTypeIdTypeIdParserRuleCall_3_0()); 
            	    
            pushFollow(FOLLOW_ruleTypeId_in_ruleTermSpec598);
            lv_typeId_3_0=ruleTypeId();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getTermSpecRule());
            	        }
                   		set(
                   			current, 
                   			"typeId",
                    		lv_typeId_3_0, 
                    		"TypeId");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTermSpec"


    // $ANTLR start "entryRuleSymAttrSpec"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:276:1: entryRuleSymAttrSpec returns [EObject current=null] : iv_ruleSymAttrSpec= ruleSymAttrSpec EOF ;
    public final EObject entryRuleSymAttrSpec() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSymAttrSpec = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:277:2: (iv_ruleSymAttrSpec= ruleSymAttrSpec EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:278:2: iv_ruleSymAttrSpec= ruleSymAttrSpec EOF
            {
             newCompositeNode(grammarAccess.getSymAttrSpecRule()); 
            pushFollow(FOLLOW_ruleSymAttrSpec_in_entryRuleSymAttrSpec634);
            iv_ruleSymAttrSpec=ruleSymAttrSpec();

            state._fsp--;

             current =iv_ruleSymAttrSpec; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleSymAttrSpec644); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSymAttrSpec"


    // $ANTLR start "ruleSymAttrSpec"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:285:1: ruleSymAttrSpec returns [EObject current=null] : ( ruleSymClass this_SymbolDefIds_1= ruleSymbolDefIds otherlv_2= ':' ( (lv_attrDefsOpt_3_0= ruleAttrDefsOpt ) ) ) ;
    public final EObject ruleSymAttrSpec() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        EObject this_SymbolDefIds_1 = null;

        EObject lv_attrDefsOpt_3_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:288:28: ( ( ruleSymClass this_SymbolDefIds_1= ruleSymbolDefIds otherlv_2= ':' ( (lv_attrDefsOpt_3_0= ruleAttrDefsOpt ) ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:289:1: ( ruleSymClass this_SymbolDefIds_1= ruleSymbolDefIds otherlv_2= ':' ( (lv_attrDefsOpt_3_0= ruleAttrDefsOpt ) ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:289:1: ( ruleSymClass this_SymbolDefIds_1= ruleSymbolDefIds otherlv_2= ':' ( (lv_attrDefsOpt_3_0= ruleAttrDefsOpt ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:290:5: ruleSymClass this_SymbolDefIds_1= ruleSymbolDefIds otherlv_2= ':' ( (lv_attrDefsOpt_3_0= ruleAttrDefsOpt ) )
            {
             
                    newCompositeNode(grammarAccess.getSymAttrSpecAccess().getSymClassParserRuleCall_0()); 
                
            pushFollow(FOLLOW_ruleSymClass_in_ruleSymAttrSpec685);
            ruleSymClass();

            state._fsp--;

             
                    afterParserOrEnumRuleCall();
                
             
                    newCompositeNode(grammarAccess.getSymAttrSpecAccess().getSymbolDefIdsParserRuleCall_1()); 
                
            pushFollow(FOLLOW_ruleSymbolDefIds_in_ruleSymAttrSpec706);
            this_SymbolDefIds_1=ruleSymbolDefIds();

            state._fsp--;

             
                    current = this_SymbolDefIds_1; 
                    afterParserOrEnumRuleCall();
                
            otherlv_2=(Token)match(input,14,FOLLOW_14_in_ruleSymAttrSpec717); 

                	newLeafNode(otherlv_2, grammarAccess.getSymAttrSpecAccess().getColonKeyword_2());
                
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:310:1: ( (lv_attrDefsOpt_3_0= ruleAttrDefsOpt ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:311:1: (lv_attrDefsOpt_3_0= ruleAttrDefsOpt )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:311:1: (lv_attrDefsOpt_3_0= ruleAttrDefsOpt )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:312:3: lv_attrDefsOpt_3_0= ruleAttrDefsOpt
            {
             
            	        newCompositeNode(grammarAccess.getSymAttrSpecAccess().getAttrDefsOptAttrDefsOptParserRuleCall_3_0()); 
            	    
            pushFollow(FOLLOW_ruleAttrDefsOpt_in_ruleSymAttrSpec738);
            lv_attrDefsOpt_3_0=ruleAttrDefsOpt();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getSymAttrSpecRule());
            	        }
                   		set(
                   			current, 
                   			"attrDefsOpt",
                    		lv_attrDefsOpt_3_0, 
                    		"AttrDefsOpt");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSymAttrSpec"


    // $ANTLR start "entryRuleSymClass"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:336:1: entryRuleSymClass returns [String current=null] : iv_ruleSymClass= ruleSymClass EOF ;
    public final String entryRuleSymClass() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleSymClass = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:337:2: (iv_ruleSymClass= ruleSymClass EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:338:2: iv_ruleSymClass= ruleSymClass EOF
            {
             newCompositeNode(grammarAccess.getSymClassRule()); 
            pushFollow(FOLLOW_ruleSymClass_in_entryRuleSymClass775);
            iv_ruleSymClass=ruleSymClass();

            state._fsp--;

             current =iv_ruleSymClass.getText(); 
            match(input,EOF,FOLLOW_EOF_in_entryRuleSymClass786); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSymClass"


    // $ANTLR start "ruleSymClass"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:345:1: ruleSymClass returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (kw= 'TREE' | kw= 'CLASS' )? kw= 'SYMBOL' ) ;
    public final AntlrDatatypeRuleToken ruleSymClass() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:348:28: ( ( (kw= 'TREE' | kw= 'CLASS' )? kw= 'SYMBOL' ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:349:1: ( (kw= 'TREE' | kw= 'CLASS' )? kw= 'SYMBOL' )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:349:1: ( (kw= 'TREE' | kw= 'CLASS' )? kw= 'SYMBOL' )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:349:2: (kw= 'TREE' | kw= 'CLASS' )? kw= 'SYMBOL'
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:349:2: (kw= 'TREE' | kw= 'CLASS' )?
            int alt3=3;
            int LA3_0 = input.LA(1);

            if ( (LA3_0==15) ) {
                alt3=1;
            }
            else if ( (LA3_0==16) ) {
                alt3=2;
            }
            switch (alt3) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:350:2: kw= 'TREE'
                    {
                    kw=(Token)match(input,15,FOLLOW_15_in_ruleSymClass825); 

                            current.merge(kw);
                            newLeafNode(kw, grammarAccess.getSymClassAccess().getTREEKeyword_0_0()); 
                        

                    }
                    break;
                case 2 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:357:2: kw= 'CLASS'
                    {
                    kw=(Token)match(input,16,FOLLOW_16_in_ruleSymClass844); 

                            current.merge(kw);
                            newLeafNode(kw, grammarAccess.getSymClassAccess().getCLASSKeyword_0_1()); 
                        

                    }
                    break;

            }

            kw=(Token)match(input,17,FOLLOW_17_in_ruleSymClass859); 

                    current.merge(kw);
                    newLeafNode(kw, grammarAccess.getSymClassAccess().getSYMBOLKeyword_1()); 
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSymClass"


    // $ANTLR start "entryRuleSymbolDefIds"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:376:1: entryRuleSymbolDefIds returns [EObject current=null] : iv_ruleSymbolDefIds= ruleSymbolDefIds EOF ;
    public final EObject entryRuleSymbolDefIds() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSymbolDefIds = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:377:2: (iv_ruleSymbolDefIds= ruleSymbolDefIds EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:378:2: iv_ruleSymbolDefIds= ruleSymbolDefIds EOF
            {
             newCompositeNode(grammarAccess.getSymbolDefIdsRule()); 
            pushFollow(FOLLOW_ruleSymbolDefIds_in_entryRuleSymbolDefIds899);
            iv_ruleSymbolDefIds=ruleSymbolDefIds();

            state._fsp--;

             current =iv_ruleSymbolDefIds; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleSymbolDefIds909); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSymbolDefIds"


    // $ANTLR start "ruleSymbolDefIds"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:385:1: ruleSymbolDefIds returns [EObject current=null] : ( ( (lv_symbolDefIds_0_0= ruleSymbolDefId ) ) (otherlv_1= ',' ( (lv_symbolDefIds_2_0= ruleSymbolDefId ) ) )* ) ;
    public final EObject ruleSymbolDefIds() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_symbolDefIds_0_0 = null;

        EObject lv_symbolDefIds_2_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:388:28: ( ( ( (lv_symbolDefIds_0_0= ruleSymbolDefId ) ) (otherlv_1= ',' ( (lv_symbolDefIds_2_0= ruleSymbolDefId ) ) )* ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:389:1: ( ( (lv_symbolDefIds_0_0= ruleSymbolDefId ) ) (otherlv_1= ',' ( (lv_symbolDefIds_2_0= ruleSymbolDefId ) ) )* )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:389:1: ( ( (lv_symbolDefIds_0_0= ruleSymbolDefId ) ) (otherlv_1= ',' ( (lv_symbolDefIds_2_0= ruleSymbolDefId ) ) )* )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:389:2: ( (lv_symbolDefIds_0_0= ruleSymbolDefId ) ) (otherlv_1= ',' ( (lv_symbolDefIds_2_0= ruleSymbolDefId ) ) )*
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:389:2: ( (lv_symbolDefIds_0_0= ruleSymbolDefId ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:390:1: (lv_symbolDefIds_0_0= ruleSymbolDefId )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:390:1: (lv_symbolDefIds_0_0= ruleSymbolDefId )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:391:3: lv_symbolDefIds_0_0= ruleSymbolDefId
            {
             
            	        newCompositeNode(grammarAccess.getSymbolDefIdsAccess().getSymbolDefIdsSymbolDefIdParserRuleCall_0_0()); 
            	    
            pushFollow(FOLLOW_ruleSymbolDefId_in_ruleSymbolDefIds955);
            lv_symbolDefIds_0_0=ruleSymbolDefId();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getSymbolDefIdsRule());
            	        }
                   		add(
                   			current, 
                   			"symbolDefIds",
                    		lv_symbolDefIds_0_0, 
                    		"SymbolDefId");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:407:2: (otherlv_1= ',' ( (lv_symbolDefIds_2_0= ruleSymbolDefId ) ) )*
            loop4:
            do {
                int alt4=2;
                int LA4_0 = input.LA(1);

                if ( (LA4_0==18) ) {
                    alt4=1;
                }


                switch (alt4) {
            	case 1 :
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:407:4: otherlv_1= ',' ( (lv_symbolDefIds_2_0= ruleSymbolDefId ) )
            	    {
            	    otherlv_1=(Token)match(input,18,FOLLOW_18_in_ruleSymbolDefIds968); 

            	        	newLeafNode(otherlv_1, grammarAccess.getSymbolDefIdsAccess().getCommaKeyword_1_0());
            	        
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:411:1: ( (lv_symbolDefIds_2_0= ruleSymbolDefId ) )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:412:1: (lv_symbolDefIds_2_0= ruleSymbolDefId )
            	    {
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:412:1: (lv_symbolDefIds_2_0= ruleSymbolDefId )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:413:3: lv_symbolDefIds_2_0= ruleSymbolDefId
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getSymbolDefIdsAccess().getSymbolDefIdsSymbolDefIdParserRuleCall_1_1_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleSymbolDefId_in_ruleSymbolDefIds989);
            	    lv_symbolDefIds_2_0=ruleSymbolDefId();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getSymbolDefIdsRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"symbolDefIds",
            	            		lv_symbolDefIds_2_0, 
            	            		"SymbolDefId");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop4;
                }
            } while (true);


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSymbolDefIds"


    // $ANTLR start "entryRuleSymbolDefId"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:437:1: entryRuleSymbolDefId returns [EObject current=null] : iv_ruleSymbolDefId= ruleSymbolDefId EOF ;
    public final EObject entryRuleSymbolDefId() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSymbolDefId = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:438:2: (iv_ruleSymbolDefId= ruleSymbolDefId EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:439:2: iv_ruleSymbolDefId= ruleSymbolDefId EOF
            {
             newCompositeNode(grammarAccess.getSymbolDefIdRule()); 
            pushFollow(FOLLOW_ruleSymbolDefId_in_entryRuleSymbolDefId1027);
            iv_ruleSymbolDefId=ruleSymbolDefId();

            state._fsp--;

             current =iv_ruleSymbolDefId; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleSymbolDefId1037); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSymbolDefId"


    // $ANTLR start "ruleSymbolDefId"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:446:1: ruleSymbolDefId returns [EObject current=null] : ( (lv_name_0_0= RULE_ID ) ) ;
    public final EObject ruleSymbolDefId() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;

         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:449:28: ( ( (lv_name_0_0= RULE_ID ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:450:1: ( (lv_name_0_0= RULE_ID ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:450:1: ( (lv_name_0_0= RULE_ID ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:451:1: (lv_name_0_0= RULE_ID )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:451:1: (lv_name_0_0= RULE_ID )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:452:3: lv_name_0_0= RULE_ID
            {
            lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleSymbolDefId1078); 

            			newLeafNode(lv_name_0_0, grammarAccess.getSymbolDefIdAccess().getNameIDTerminalRuleCall_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getSymbolDefIdRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_0_0, 
                    		"ID");
            	    

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSymbolDefId"


    // $ANTLR start "entryRuleAttrDefsOpt"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:476:1: entryRuleAttrDefsOpt returns [EObject current=null] : iv_ruleAttrDefsOpt= ruleAttrDefsOpt EOF ;
    public final EObject entryRuleAttrDefsOpt() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAttrDefsOpt = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:477:2: (iv_ruleAttrDefsOpt= ruleAttrDefsOpt EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:478:2: iv_ruleAttrDefsOpt= ruleAttrDefsOpt EOF
            {
             newCompositeNode(grammarAccess.getAttrDefsOptRule()); 
            pushFollow(FOLLOW_ruleAttrDefsOpt_in_entryRuleAttrDefsOpt1118);
            iv_ruleAttrDefsOpt=ruleAttrDefsOpt();

            state._fsp--;

             current =iv_ruleAttrDefsOpt; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAttrDefsOpt1128); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAttrDefsOpt"


    // $ANTLR start "ruleAttrDefsOpt"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:485:1: ruleAttrDefsOpt returns [EObject current=null] : ( () ( (lv_attrDefs_1_0= ruleAttrDefs ) )? ) ;
    public final EObject ruleAttrDefsOpt() throws RecognitionException {
        EObject current = null;

        EObject lv_attrDefs_1_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:488:28: ( ( () ( (lv_attrDefs_1_0= ruleAttrDefs ) )? ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:489:1: ( () ( (lv_attrDefs_1_0= ruleAttrDefs ) )? )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:489:1: ( () ( (lv_attrDefs_1_0= ruleAttrDefs ) )? )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:489:2: () ( (lv_attrDefs_1_0= ruleAttrDefs ) )?
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:489:2: ()
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:490:5: 
            {

                    current = forceCreateModelElement(
                        grammarAccess.getAttrDefsOptAccess().getAttrDefsOptAction_0(),
                        current);
                

            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:495:2: ( (lv_attrDefs_1_0= ruleAttrDefs ) )?
            int alt5=2;
            int LA5_0 = input.LA(1);

            if ( (LA5_0==RULE_ID) ) {
                alt5=1;
            }
            switch (alt5) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:496:1: (lv_attrDefs_1_0= ruleAttrDefs )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:496:1: (lv_attrDefs_1_0= ruleAttrDefs )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:497:3: lv_attrDefs_1_0= ruleAttrDefs
                    {
                     
                    	        newCompositeNode(grammarAccess.getAttrDefsOptAccess().getAttrDefsAttrDefsParserRuleCall_1_0()); 
                    	    
                    pushFollow(FOLLOW_ruleAttrDefs_in_ruleAttrDefsOpt1183);
                    lv_attrDefs_1_0=ruleAttrDefs();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getAttrDefsOptRule());
                    	        }
                           		set(
                           			current, 
                           			"attrDefs",
                            		lv_attrDefs_1_0, 
                            		"AttrDefs");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }
                    break;

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAttrDefsOpt"


    // $ANTLR start "entryRuleAttrDefs"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:521:1: entryRuleAttrDefs returns [EObject current=null] : iv_ruleAttrDefs= ruleAttrDefs EOF ;
    public final EObject entryRuleAttrDefs() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAttrDefs = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:522:2: (iv_ruleAttrDefs= ruleAttrDefs EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:523:2: iv_ruleAttrDefs= ruleAttrDefs EOF
            {
             newCompositeNode(grammarAccess.getAttrDefsRule()); 
            pushFollow(FOLLOW_ruleAttrDefs_in_entryRuleAttrDefs1220);
            iv_ruleAttrDefs=ruleAttrDefs();

            state._fsp--;

             current =iv_ruleAttrDefs; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAttrDefs1230); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAttrDefs"


    // $ANTLR start "ruleAttrDefs"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:530:1: ruleAttrDefs returns [EObject current=null] : ( ( (lv_attrDefs_0_0= ruleAttrDef ) ) (otherlv_1= ',' ( (lv_attrDefs_2_0= ruleAttrDef ) ) )* ) ;
    public final EObject ruleAttrDefs() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_attrDefs_0_0 = null;

        EObject lv_attrDefs_2_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:533:28: ( ( ( (lv_attrDefs_0_0= ruleAttrDef ) ) (otherlv_1= ',' ( (lv_attrDefs_2_0= ruleAttrDef ) ) )* ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:534:1: ( ( (lv_attrDefs_0_0= ruleAttrDef ) ) (otherlv_1= ',' ( (lv_attrDefs_2_0= ruleAttrDef ) ) )* )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:534:1: ( ( (lv_attrDefs_0_0= ruleAttrDef ) ) (otherlv_1= ',' ( (lv_attrDefs_2_0= ruleAttrDef ) ) )* )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:534:2: ( (lv_attrDefs_0_0= ruleAttrDef ) ) (otherlv_1= ',' ( (lv_attrDefs_2_0= ruleAttrDef ) ) )*
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:534:2: ( (lv_attrDefs_0_0= ruleAttrDef ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:535:1: (lv_attrDefs_0_0= ruleAttrDef )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:535:1: (lv_attrDefs_0_0= ruleAttrDef )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:536:3: lv_attrDefs_0_0= ruleAttrDef
            {
             
            	        newCompositeNode(grammarAccess.getAttrDefsAccess().getAttrDefsAttrDefParserRuleCall_0_0()); 
            	    
            pushFollow(FOLLOW_ruleAttrDef_in_ruleAttrDefs1276);
            lv_attrDefs_0_0=ruleAttrDef();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getAttrDefsRule());
            	        }
                   		add(
                   			current, 
                   			"attrDefs",
                    		lv_attrDefs_0_0, 
                    		"AttrDef");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:552:2: (otherlv_1= ',' ( (lv_attrDefs_2_0= ruleAttrDef ) ) )*
            loop6:
            do {
                int alt6=2;
                int LA6_0 = input.LA(1);

                if ( (LA6_0==18) ) {
                    alt6=1;
                }


                switch (alt6) {
            	case 1 :
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:552:4: otherlv_1= ',' ( (lv_attrDefs_2_0= ruleAttrDef ) )
            	    {
            	    otherlv_1=(Token)match(input,18,FOLLOW_18_in_ruleAttrDefs1289); 

            	        	newLeafNode(otherlv_1, grammarAccess.getAttrDefsAccess().getCommaKeyword_1_0());
            	        
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:556:1: ( (lv_attrDefs_2_0= ruleAttrDef ) )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:557:1: (lv_attrDefs_2_0= ruleAttrDef )
            	    {
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:557:1: (lv_attrDefs_2_0= ruleAttrDef )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:558:3: lv_attrDefs_2_0= ruleAttrDef
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getAttrDefsAccess().getAttrDefsAttrDefParserRuleCall_1_1_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleAttrDef_in_ruleAttrDefs1310);
            	    lv_attrDefs_2_0=ruleAttrDef();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getAttrDefsRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"attrDefs",
            	            		lv_attrDefs_2_0, 
            	            		"AttrDef");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop6;
                }
            } while (true);


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAttrDefs"


    // $ANTLR start "entryRuleAttrDef"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:582:1: entryRuleAttrDef returns [EObject current=null] : iv_ruleAttrDef= ruleAttrDef EOF ;
    public final EObject entryRuleAttrDef() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAttrDef = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:583:2: (iv_ruleAttrDef= ruleAttrDef EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:584:2: iv_ruleAttrDef= ruleAttrDef EOF
            {
             newCompositeNode(grammarAccess.getAttrDefRule()); 
            pushFollow(FOLLOW_ruleAttrDef_in_entryRuleAttrDef1348);
            iv_ruleAttrDef=ruleAttrDef();

            state._fsp--;

             current =iv_ruleAttrDef; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAttrDef1358); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAttrDef"


    // $ANTLR start "ruleAttrDef"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:591:1: ruleAttrDef returns [EObject current=null] : (this_AttrDefIds_0= ruleAttrDefIds otherlv_1= ':' ( (lv_typeId_2_0= ruleTypeId ) ) ( ruleClass )? ) ;
    public final EObject ruleAttrDef() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject this_AttrDefIds_0 = null;

        EObject lv_typeId_2_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:594:28: ( (this_AttrDefIds_0= ruleAttrDefIds otherlv_1= ':' ( (lv_typeId_2_0= ruleTypeId ) ) ( ruleClass )? ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:595:1: (this_AttrDefIds_0= ruleAttrDefIds otherlv_1= ':' ( (lv_typeId_2_0= ruleTypeId ) ) ( ruleClass )? )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:595:1: (this_AttrDefIds_0= ruleAttrDefIds otherlv_1= ':' ( (lv_typeId_2_0= ruleTypeId ) ) ( ruleClass )? )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:596:5: this_AttrDefIds_0= ruleAttrDefIds otherlv_1= ':' ( (lv_typeId_2_0= ruleTypeId ) ) ( ruleClass )?
            {
             
                    newCompositeNode(grammarAccess.getAttrDefAccess().getAttrDefIdsParserRuleCall_0()); 
                
            pushFollow(FOLLOW_ruleAttrDefIds_in_ruleAttrDef1405);
            this_AttrDefIds_0=ruleAttrDefIds();

            state._fsp--;

             
                    current = this_AttrDefIds_0; 
                    afterParserOrEnumRuleCall();
                
            otherlv_1=(Token)match(input,14,FOLLOW_14_in_ruleAttrDef1416); 

                	newLeafNode(otherlv_1, grammarAccess.getAttrDefAccess().getColonKeyword_1());
                
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:608:1: ( (lv_typeId_2_0= ruleTypeId ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:609:1: (lv_typeId_2_0= ruleTypeId )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:609:1: (lv_typeId_2_0= ruleTypeId )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:610:3: lv_typeId_2_0= ruleTypeId
            {
             
            	        newCompositeNode(grammarAccess.getAttrDefAccess().getTypeIdTypeIdParserRuleCall_2_0()); 
            	    
            pushFollow(FOLLOW_ruleTypeId_in_ruleAttrDef1437);
            lv_typeId_2_0=ruleTypeId();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getAttrDefRule());
            	        }
                   		set(
                   			current, 
                   			"typeId",
                    		lv_typeId_2_0, 
                    		"TypeId");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:626:2: ( ruleClass )?
            int alt7=2;
            int LA7_0 = input.LA(1);

            if ( ((LA7_0>=19 && LA7_0<=20)) ) {
                alt7=1;
            }
            switch (alt7) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:627:5: ruleClass
                    {
                     
                            newCompositeNode(grammarAccess.getAttrDefAccess().getClassParserRuleCall_3()); 
                        
                    pushFollow(FOLLOW_ruleClass_in_ruleAttrDef1454);
                    ruleClass();

                    state._fsp--;

                     
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAttrDef"


    // $ANTLR start "entryRuleAttrDefIds"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:642:1: entryRuleAttrDefIds returns [EObject current=null] : iv_ruleAttrDefIds= ruleAttrDefIds EOF ;
    public final EObject entryRuleAttrDefIds() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAttrDefIds = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:643:2: (iv_ruleAttrDefIds= ruleAttrDefIds EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:644:2: iv_ruleAttrDefIds= ruleAttrDefIds EOF
            {
             newCompositeNode(grammarAccess.getAttrDefIdsRule()); 
            pushFollow(FOLLOW_ruleAttrDefIds_in_entryRuleAttrDefIds1491);
            iv_ruleAttrDefIds=ruleAttrDefIds();

            state._fsp--;

             current =iv_ruleAttrDefIds; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAttrDefIds1501); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAttrDefIds"


    // $ANTLR start "ruleAttrDefIds"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:651:1: ruleAttrDefIds returns [EObject current=null] : ( ( (lv_attrDefIds_0_0= ruleAttrDefId ) ) (otherlv_1= ',' ( (lv_attrDefIds_2_0= ruleAttrDefId ) ) )* ) ;
    public final EObject ruleAttrDefIds() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_attrDefIds_0_0 = null;

        EObject lv_attrDefIds_2_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:654:28: ( ( ( (lv_attrDefIds_0_0= ruleAttrDefId ) ) (otherlv_1= ',' ( (lv_attrDefIds_2_0= ruleAttrDefId ) ) )* ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:655:1: ( ( (lv_attrDefIds_0_0= ruleAttrDefId ) ) (otherlv_1= ',' ( (lv_attrDefIds_2_0= ruleAttrDefId ) ) )* )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:655:1: ( ( (lv_attrDefIds_0_0= ruleAttrDefId ) ) (otherlv_1= ',' ( (lv_attrDefIds_2_0= ruleAttrDefId ) ) )* )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:655:2: ( (lv_attrDefIds_0_0= ruleAttrDefId ) ) (otherlv_1= ',' ( (lv_attrDefIds_2_0= ruleAttrDefId ) ) )*
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:655:2: ( (lv_attrDefIds_0_0= ruleAttrDefId ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:656:1: (lv_attrDefIds_0_0= ruleAttrDefId )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:656:1: (lv_attrDefIds_0_0= ruleAttrDefId )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:657:3: lv_attrDefIds_0_0= ruleAttrDefId
            {
             
            	        newCompositeNode(grammarAccess.getAttrDefIdsAccess().getAttrDefIdsAttrDefIdParserRuleCall_0_0()); 
            	    
            pushFollow(FOLLOW_ruleAttrDefId_in_ruleAttrDefIds1547);
            lv_attrDefIds_0_0=ruleAttrDefId();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getAttrDefIdsRule());
            	        }
                   		add(
                   			current, 
                   			"attrDefIds",
                    		lv_attrDefIds_0_0, 
                    		"AttrDefId");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:673:2: (otherlv_1= ',' ( (lv_attrDefIds_2_0= ruleAttrDefId ) ) )*
            loop8:
            do {
                int alt8=2;
                int LA8_0 = input.LA(1);

                if ( (LA8_0==18) ) {
                    alt8=1;
                }


                switch (alt8) {
            	case 1 :
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:673:4: otherlv_1= ',' ( (lv_attrDefIds_2_0= ruleAttrDefId ) )
            	    {
            	    otherlv_1=(Token)match(input,18,FOLLOW_18_in_ruleAttrDefIds1560); 

            	        	newLeafNode(otherlv_1, grammarAccess.getAttrDefIdsAccess().getCommaKeyword_1_0());
            	        
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:677:1: ( (lv_attrDefIds_2_0= ruleAttrDefId ) )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:678:1: (lv_attrDefIds_2_0= ruleAttrDefId )
            	    {
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:678:1: (lv_attrDefIds_2_0= ruleAttrDefId )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:679:3: lv_attrDefIds_2_0= ruleAttrDefId
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getAttrDefIdsAccess().getAttrDefIdsAttrDefIdParserRuleCall_1_1_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleAttrDefId_in_ruleAttrDefIds1581);
            	    lv_attrDefIds_2_0=ruleAttrDefId();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getAttrDefIdsRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"attrDefIds",
            	            		lv_attrDefIds_2_0, 
            	            		"AttrDefId");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop8;
                }
            } while (true);


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAttrDefIds"


    // $ANTLR start "entryRuleAttrDefId"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:703:1: entryRuleAttrDefId returns [EObject current=null] : iv_ruleAttrDefId= ruleAttrDefId EOF ;
    public final EObject entryRuleAttrDefId() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAttrDefId = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:704:2: (iv_ruleAttrDefId= ruleAttrDefId EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:705:2: iv_ruleAttrDefId= ruleAttrDefId EOF
            {
             newCompositeNode(grammarAccess.getAttrDefIdRule()); 
            pushFollow(FOLLOW_ruleAttrDefId_in_entryRuleAttrDefId1619);
            iv_ruleAttrDefId=ruleAttrDefId();

            state._fsp--;

             current =iv_ruleAttrDefId; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAttrDefId1629); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAttrDefId"


    // $ANTLR start "ruleAttrDefId"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:712:1: ruleAttrDefId returns [EObject current=null] : ( (lv_name_0_0= RULE_ID ) ) ;
    public final EObject ruleAttrDefId() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;

         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:715:28: ( ( (lv_name_0_0= RULE_ID ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:716:1: ( (lv_name_0_0= RULE_ID ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:716:1: ( (lv_name_0_0= RULE_ID ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:717:1: (lv_name_0_0= RULE_ID )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:717:1: (lv_name_0_0= RULE_ID )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:718:3: lv_name_0_0= RULE_ID
            {
            lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleAttrDefId1670); 

            			newLeafNode(lv_name_0_0, grammarAccess.getAttrDefIdAccess().getNameIDTerminalRuleCall_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getAttrDefIdRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_0_0, 
                    		"ID");
            	    

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAttrDefId"


    // $ANTLR start "entryRuleTypeId"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:742:1: entryRuleTypeId returns [EObject current=null] : iv_ruleTypeId= ruleTypeId EOF ;
    public final EObject entryRuleTypeId() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTypeId = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:743:2: (iv_ruleTypeId= ruleTypeId EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:744:2: iv_ruleTypeId= ruleTypeId EOF
            {
             newCompositeNode(grammarAccess.getTypeIdRule()); 
            pushFollow(FOLLOW_ruleTypeId_in_entryRuleTypeId1710);
            iv_ruleTypeId=ruleTypeId();

            state._fsp--;

             current =iv_ruleTypeId; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleTypeId1720); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTypeId"


    // $ANTLR start "ruleTypeId"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:751:1: ruleTypeId returns [EObject current=null] : ( (lv_name_0_0= RULE_ID ) ) ;
    public final EObject ruleTypeId() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;

         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:754:28: ( ( (lv_name_0_0= RULE_ID ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:755:1: ( (lv_name_0_0= RULE_ID ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:755:1: ( (lv_name_0_0= RULE_ID ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:756:1: (lv_name_0_0= RULE_ID )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:756:1: (lv_name_0_0= RULE_ID )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:757:3: lv_name_0_0= RULE_ID
            {
            lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleTypeId1761); 

            			newLeafNode(lv_name_0_0, grammarAccess.getTypeIdAccess().getNameIDTerminalRuleCall_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getTypeIdRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_0_0, 
                    		"ID");
            	    

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTypeId"


    // $ANTLR start "entryRuleClass"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:781:1: entryRuleClass returns [String current=null] : iv_ruleClass= ruleClass EOF ;
    public final String entryRuleClass() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleClass = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:782:2: (iv_ruleClass= ruleClass EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:783:2: iv_ruleClass= ruleClass EOF
            {
             newCompositeNode(grammarAccess.getClassRule()); 
            pushFollow(FOLLOW_ruleClass_in_entryRuleClass1802);
            iv_ruleClass=ruleClass();

            state._fsp--;

             current =iv_ruleClass.getText(); 
            match(input,EOF,FOLLOW_EOF_in_entryRuleClass1813); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleClass"


    // $ANTLR start "ruleClass"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:790:1: ruleClass returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'SYNT' | kw= 'INH' ) ;
    public final AntlrDatatypeRuleToken ruleClass() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:793:28: ( (kw= 'SYNT' | kw= 'INH' ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:794:1: (kw= 'SYNT' | kw= 'INH' )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:794:1: (kw= 'SYNT' | kw= 'INH' )
            int alt9=2;
            int LA9_0 = input.LA(1);

            if ( (LA9_0==19) ) {
                alt9=1;
            }
            else if ( (LA9_0==20) ) {
                alt9=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 9, 0, input);

                throw nvae;
            }
            switch (alt9) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:795:2: kw= 'SYNT'
                    {
                    kw=(Token)match(input,19,FOLLOW_19_in_ruleClass1851); 

                            current.merge(kw);
                            newLeafNode(kw, grammarAccess.getClassAccess().getSYNTKeyword_0()); 
                        

                    }
                    break;
                case 2 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:802:2: kw= 'INH'
                    {
                    kw=(Token)match(input,20,FOLLOW_20_in_ruleClass1870); 

                            current.merge(kw);
                            newLeafNode(kw, grammarAccess.getClassAccess().getINHKeyword_1()); 
                        

                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleClass"


    // $ANTLR start "entryRuleAttrSpec"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:815:1: entryRuleAttrSpec returns [EObject current=null] : iv_ruleAttrSpec= ruleAttrSpec EOF ;
    public final EObject entryRuleAttrSpec() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAttrSpec = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:816:2: (iv_ruleAttrSpec= ruleAttrSpec EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:817:2: iv_ruleAttrSpec= ruleAttrSpec EOF
            {
             newCompositeNode(grammarAccess.getAttrSpecRule()); 
            pushFollow(FOLLOW_ruleAttrSpec_in_entryRuleAttrSpec1910);
            iv_ruleAttrSpec=ruleAttrSpec();

            state._fsp--;

             current =iv_ruleAttrSpec; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAttrSpec1920); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAttrSpec"


    // $ANTLR start "ruleAttrSpec"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:824:1: ruleAttrSpec returns [EObject current=null] : (otherlv_0= 'ATTR' this_AttrNames_1= ruleAttrNames otherlv_2= ':' ( (lv_typeId_3_0= ruleTypeId ) ) ( ruleClass )? ) ;
    public final EObject ruleAttrSpec() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        EObject this_AttrNames_1 = null;

        EObject lv_typeId_3_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:827:28: ( (otherlv_0= 'ATTR' this_AttrNames_1= ruleAttrNames otherlv_2= ':' ( (lv_typeId_3_0= ruleTypeId ) ) ( ruleClass )? ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:828:1: (otherlv_0= 'ATTR' this_AttrNames_1= ruleAttrNames otherlv_2= ':' ( (lv_typeId_3_0= ruleTypeId ) ) ( ruleClass )? )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:828:1: (otherlv_0= 'ATTR' this_AttrNames_1= ruleAttrNames otherlv_2= ':' ( (lv_typeId_3_0= ruleTypeId ) ) ( ruleClass )? )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:828:3: otherlv_0= 'ATTR' this_AttrNames_1= ruleAttrNames otherlv_2= ':' ( (lv_typeId_3_0= ruleTypeId ) ) ( ruleClass )?
            {
            otherlv_0=(Token)match(input,21,FOLLOW_21_in_ruleAttrSpec1957); 

                	newLeafNode(otherlv_0, grammarAccess.getAttrSpecAccess().getATTRKeyword_0());
                
             
                    newCompositeNode(grammarAccess.getAttrSpecAccess().getAttrNamesParserRuleCall_1()); 
                
            pushFollow(FOLLOW_ruleAttrNames_in_ruleAttrSpec1979);
            this_AttrNames_1=ruleAttrNames();

            state._fsp--;

             
                    current = this_AttrNames_1; 
                    afterParserOrEnumRuleCall();
                
            otherlv_2=(Token)match(input,14,FOLLOW_14_in_ruleAttrSpec1990); 

                	newLeafNode(otherlv_2, grammarAccess.getAttrSpecAccess().getColonKeyword_2());
                
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:845:1: ( (lv_typeId_3_0= ruleTypeId ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:846:1: (lv_typeId_3_0= ruleTypeId )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:846:1: (lv_typeId_3_0= ruleTypeId )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:847:3: lv_typeId_3_0= ruleTypeId
            {
             
            	        newCompositeNode(grammarAccess.getAttrSpecAccess().getTypeIdTypeIdParserRuleCall_3_0()); 
            	    
            pushFollow(FOLLOW_ruleTypeId_in_ruleAttrSpec2011);
            lv_typeId_3_0=ruleTypeId();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getAttrSpecRule());
            	        }
                   		set(
                   			current, 
                   			"typeId",
                    		lv_typeId_3_0, 
                    		"TypeId");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:863:2: ( ruleClass )?
            int alt10=2;
            int LA10_0 = input.LA(1);

            if ( ((LA10_0>=19 && LA10_0<=20)) ) {
                alt10=1;
            }
            switch (alt10) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:864:5: ruleClass
                    {
                     
                            newCompositeNode(grammarAccess.getAttrSpecAccess().getClassParserRuleCall_4()); 
                        
                    pushFollow(FOLLOW_ruleClass_in_ruleAttrSpec2028);
                    ruleClass();

                    state._fsp--;

                     
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAttrSpec"


    // $ANTLR start "entryRuleAttrNames"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:879:1: entryRuleAttrNames returns [EObject current=null] : iv_ruleAttrNames= ruleAttrNames EOF ;
    public final EObject entryRuleAttrNames() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAttrNames = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:880:2: (iv_ruleAttrNames= ruleAttrNames EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:881:2: iv_ruleAttrNames= ruleAttrNames EOF
            {
             newCompositeNode(grammarAccess.getAttrNamesRule()); 
            pushFollow(FOLLOW_ruleAttrNames_in_entryRuleAttrNames2065);
            iv_ruleAttrNames=ruleAttrNames();

            state._fsp--;

             current =iv_ruleAttrNames; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAttrNames2075); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAttrNames"


    // $ANTLR start "ruleAttrNames"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:888:1: ruleAttrNames returns [EObject current=null] : ( ( (lv_attrNames_0_0= ruleAttrName ) ) (otherlv_1= ',' ( (lv_attrNames_2_0= ruleAttrName ) ) )* ) ;
    public final EObject ruleAttrNames() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_attrNames_0_0 = null;

        EObject lv_attrNames_2_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:891:28: ( ( ( (lv_attrNames_0_0= ruleAttrName ) ) (otherlv_1= ',' ( (lv_attrNames_2_0= ruleAttrName ) ) )* ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:892:1: ( ( (lv_attrNames_0_0= ruleAttrName ) ) (otherlv_1= ',' ( (lv_attrNames_2_0= ruleAttrName ) ) )* )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:892:1: ( ( (lv_attrNames_0_0= ruleAttrName ) ) (otherlv_1= ',' ( (lv_attrNames_2_0= ruleAttrName ) ) )* )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:892:2: ( (lv_attrNames_0_0= ruleAttrName ) ) (otherlv_1= ',' ( (lv_attrNames_2_0= ruleAttrName ) ) )*
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:892:2: ( (lv_attrNames_0_0= ruleAttrName ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:893:1: (lv_attrNames_0_0= ruleAttrName )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:893:1: (lv_attrNames_0_0= ruleAttrName )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:894:3: lv_attrNames_0_0= ruleAttrName
            {
             
            	        newCompositeNode(grammarAccess.getAttrNamesAccess().getAttrNamesAttrNameParserRuleCall_0_0()); 
            	    
            pushFollow(FOLLOW_ruleAttrName_in_ruleAttrNames2121);
            lv_attrNames_0_0=ruleAttrName();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getAttrNamesRule());
            	        }
                   		add(
                   			current, 
                   			"attrNames",
                    		lv_attrNames_0_0, 
                    		"AttrName");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:910:2: (otherlv_1= ',' ( (lv_attrNames_2_0= ruleAttrName ) ) )*
            loop11:
            do {
                int alt11=2;
                int LA11_0 = input.LA(1);

                if ( (LA11_0==18) ) {
                    alt11=1;
                }


                switch (alt11) {
            	case 1 :
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:910:4: otherlv_1= ',' ( (lv_attrNames_2_0= ruleAttrName ) )
            	    {
            	    otherlv_1=(Token)match(input,18,FOLLOW_18_in_ruleAttrNames2134); 

            	        	newLeafNode(otherlv_1, grammarAccess.getAttrNamesAccess().getCommaKeyword_1_0());
            	        
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:914:1: ( (lv_attrNames_2_0= ruleAttrName ) )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:915:1: (lv_attrNames_2_0= ruleAttrName )
            	    {
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:915:1: (lv_attrNames_2_0= ruleAttrName )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:916:3: lv_attrNames_2_0= ruleAttrName
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getAttrNamesAccess().getAttrNamesAttrNameParserRuleCall_1_1_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleAttrName_in_ruleAttrNames2155);
            	    lv_attrNames_2_0=ruleAttrName();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getAttrNamesRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"attrNames",
            	            		lv_attrNames_2_0, 
            	            		"AttrName");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop11;
                }
            } while (true);


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAttrNames"


    // $ANTLR start "entryRuleAttrName"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:940:1: entryRuleAttrName returns [EObject current=null] : iv_ruleAttrName= ruleAttrName EOF ;
    public final EObject entryRuleAttrName() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAttrName = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:941:2: (iv_ruleAttrName= ruleAttrName EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:942:2: iv_ruleAttrName= ruleAttrName EOF
            {
             newCompositeNode(grammarAccess.getAttrNameRule()); 
            pushFollow(FOLLOW_ruleAttrName_in_entryRuleAttrName2193);
            iv_ruleAttrName=ruleAttrName();

            state._fsp--;

             current =iv_ruleAttrName; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAttrName2203); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAttrName"


    // $ANTLR start "ruleAttrName"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:949:1: ruleAttrName returns [EObject current=null] : ( (lv_name_0_0= RULE_ID ) ) ;
    public final EObject ruleAttrName() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;

         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:952:28: ( ( (lv_name_0_0= RULE_ID ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:953:1: ( (lv_name_0_0= RULE_ID ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:953:1: ( (lv_name_0_0= RULE_ID ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:954:1: (lv_name_0_0= RULE_ID )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:954:1: (lv_name_0_0= RULE_ID )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:955:3: lv_name_0_0= RULE_ID
            {
            lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleAttrName2244); 

            			newLeafNode(lv_name_0_0, grammarAccess.getAttrNameAccess().getNameIDTerminalRuleCall_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getAttrNameRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_0_0, 
                    		"ID");
            	    

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAttrName"


    // $ANTLR start "entryRuleChainSpec"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:979:1: entryRuleChainSpec returns [EObject current=null] : iv_ruleChainSpec= ruleChainSpec EOF ;
    public final EObject entryRuleChainSpec() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleChainSpec = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:980:2: (iv_ruleChainSpec= ruleChainSpec EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:981:2: iv_ruleChainSpec= ruleChainSpec EOF
            {
             newCompositeNode(grammarAccess.getChainSpecRule()); 
            pushFollow(FOLLOW_ruleChainSpec_in_entryRuleChainSpec2284);
            iv_ruleChainSpec=ruleChainSpec();

            state._fsp--;

             current =iv_ruleChainSpec; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleChainSpec2294); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleChainSpec"


    // $ANTLR start "ruleChainSpec"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:988:1: ruleChainSpec returns [EObject current=null] : (otherlv_0= 'CHAIN' this_ChainNames_1= ruleChainNames otherlv_2= ':' ( (lv_typeId_3_0= ruleTypeId ) ) ) ;
    public final EObject ruleChainSpec() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        EObject this_ChainNames_1 = null;

        EObject lv_typeId_3_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:991:28: ( (otherlv_0= 'CHAIN' this_ChainNames_1= ruleChainNames otherlv_2= ':' ( (lv_typeId_3_0= ruleTypeId ) ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:992:1: (otherlv_0= 'CHAIN' this_ChainNames_1= ruleChainNames otherlv_2= ':' ( (lv_typeId_3_0= ruleTypeId ) ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:992:1: (otherlv_0= 'CHAIN' this_ChainNames_1= ruleChainNames otherlv_2= ':' ( (lv_typeId_3_0= ruleTypeId ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:992:3: otherlv_0= 'CHAIN' this_ChainNames_1= ruleChainNames otherlv_2= ':' ( (lv_typeId_3_0= ruleTypeId ) )
            {
            otherlv_0=(Token)match(input,22,FOLLOW_22_in_ruleChainSpec2331); 

                	newLeafNode(otherlv_0, grammarAccess.getChainSpecAccess().getCHAINKeyword_0());
                
             
                    newCompositeNode(grammarAccess.getChainSpecAccess().getChainNamesParserRuleCall_1()); 
                
            pushFollow(FOLLOW_ruleChainNames_in_ruleChainSpec2353);
            this_ChainNames_1=ruleChainNames();

            state._fsp--;

             
                    current = this_ChainNames_1; 
                    afterParserOrEnumRuleCall();
                
            otherlv_2=(Token)match(input,14,FOLLOW_14_in_ruleChainSpec2364); 

                	newLeafNode(otherlv_2, grammarAccess.getChainSpecAccess().getColonKeyword_2());
                
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1009:1: ( (lv_typeId_3_0= ruleTypeId ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1010:1: (lv_typeId_3_0= ruleTypeId )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1010:1: (lv_typeId_3_0= ruleTypeId )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1011:3: lv_typeId_3_0= ruleTypeId
            {
             
            	        newCompositeNode(grammarAccess.getChainSpecAccess().getTypeIdTypeIdParserRuleCall_3_0()); 
            	    
            pushFollow(FOLLOW_ruleTypeId_in_ruleChainSpec2385);
            lv_typeId_3_0=ruleTypeId();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getChainSpecRule());
            	        }
                   		set(
                   			current, 
                   			"typeId",
                    		lv_typeId_3_0, 
                    		"TypeId");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleChainSpec"


    // $ANTLR start "entryRuleChainNames"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1035:1: entryRuleChainNames returns [EObject current=null] : iv_ruleChainNames= ruleChainNames EOF ;
    public final EObject entryRuleChainNames() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleChainNames = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1036:2: (iv_ruleChainNames= ruleChainNames EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1037:2: iv_ruleChainNames= ruleChainNames EOF
            {
             newCompositeNode(grammarAccess.getChainNamesRule()); 
            pushFollow(FOLLOW_ruleChainNames_in_entryRuleChainNames2421);
            iv_ruleChainNames=ruleChainNames();

            state._fsp--;

             current =iv_ruleChainNames; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleChainNames2431); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleChainNames"


    // $ANTLR start "ruleChainNames"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1044:1: ruleChainNames returns [EObject current=null] : ( ( (lv_chainNames_0_0= ruleChainName ) ) (otherlv_1= ',' ( (lv_chainNames_2_0= ruleChainName ) ) )* ) ;
    public final EObject ruleChainNames() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_chainNames_0_0 = null;

        EObject lv_chainNames_2_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1047:28: ( ( ( (lv_chainNames_0_0= ruleChainName ) ) (otherlv_1= ',' ( (lv_chainNames_2_0= ruleChainName ) ) )* ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1048:1: ( ( (lv_chainNames_0_0= ruleChainName ) ) (otherlv_1= ',' ( (lv_chainNames_2_0= ruleChainName ) ) )* )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1048:1: ( ( (lv_chainNames_0_0= ruleChainName ) ) (otherlv_1= ',' ( (lv_chainNames_2_0= ruleChainName ) ) )* )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1048:2: ( (lv_chainNames_0_0= ruleChainName ) ) (otherlv_1= ',' ( (lv_chainNames_2_0= ruleChainName ) ) )*
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1048:2: ( (lv_chainNames_0_0= ruleChainName ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1049:1: (lv_chainNames_0_0= ruleChainName )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1049:1: (lv_chainNames_0_0= ruleChainName )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1050:3: lv_chainNames_0_0= ruleChainName
            {
             
            	        newCompositeNode(grammarAccess.getChainNamesAccess().getChainNamesChainNameParserRuleCall_0_0()); 
            	    
            pushFollow(FOLLOW_ruleChainName_in_ruleChainNames2477);
            lv_chainNames_0_0=ruleChainName();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getChainNamesRule());
            	        }
                   		add(
                   			current, 
                   			"chainNames",
                    		lv_chainNames_0_0, 
                    		"ChainName");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1066:2: (otherlv_1= ',' ( (lv_chainNames_2_0= ruleChainName ) ) )*
            loop12:
            do {
                int alt12=2;
                int LA12_0 = input.LA(1);

                if ( (LA12_0==18) ) {
                    alt12=1;
                }


                switch (alt12) {
            	case 1 :
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1066:4: otherlv_1= ',' ( (lv_chainNames_2_0= ruleChainName ) )
            	    {
            	    otherlv_1=(Token)match(input,18,FOLLOW_18_in_ruleChainNames2490); 

            	        	newLeafNode(otherlv_1, grammarAccess.getChainNamesAccess().getCommaKeyword_1_0());
            	        
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1070:1: ( (lv_chainNames_2_0= ruleChainName ) )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1071:1: (lv_chainNames_2_0= ruleChainName )
            	    {
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1071:1: (lv_chainNames_2_0= ruleChainName )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1072:3: lv_chainNames_2_0= ruleChainName
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getChainNamesAccess().getChainNamesChainNameParserRuleCall_1_1_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleChainName_in_ruleChainNames2511);
            	    lv_chainNames_2_0=ruleChainName();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getChainNamesRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"chainNames",
            	            		lv_chainNames_2_0, 
            	            		"ChainName");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop12;
                }
            } while (true);


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleChainNames"


    // $ANTLR start "entryRuleChainName"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1096:1: entryRuleChainName returns [EObject current=null] : iv_ruleChainName= ruleChainName EOF ;
    public final EObject entryRuleChainName() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleChainName = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1097:2: (iv_ruleChainName= ruleChainName EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1098:2: iv_ruleChainName= ruleChainName EOF
            {
             newCompositeNode(grammarAccess.getChainNameRule()); 
            pushFollow(FOLLOW_ruleChainName_in_entryRuleChainName2549);
            iv_ruleChainName=ruleChainName();

            state._fsp--;

             current =iv_ruleChainName; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleChainName2559); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleChainName"


    // $ANTLR start "ruleChainName"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1105:1: ruleChainName returns [EObject current=null] : ( (lv_name_0_0= RULE_ID ) ) ;
    public final EObject ruleChainName() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;

         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1108:28: ( ( (lv_name_0_0= RULE_ID ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1109:1: ( (lv_name_0_0= RULE_ID ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1109:1: ( (lv_name_0_0= RULE_ID ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1110:1: (lv_name_0_0= RULE_ID )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1110:1: (lv_name_0_0= RULE_ID )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1111:3: lv_name_0_0= RULE_ID
            {
            lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleChainName2600); 

            			newLeafNode(lv_name_0_0, grammarAccess.getChainNameAccess().getNameIDTerminalRuleCall_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getChainNameRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_0_0, 
                    		"ID");
            	    

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleChainName"


    // $ANTLR start "entryRuleRuleSpec"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1135:1: entryRuleRuleSpec returns [EObject current=null] : iv_ruleRuleSpec= ruleRuleSpec EOF ;
    public final EObject entryRuleRuleSpec() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRuleSpec = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1136:2: (iv_ruleRuleSpec= ruleRuleSpec EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1137:2: iv_ruleRuleSpec= ruleRuleSpec EOF
            {
             newCompositeNode(grammarAccess.getRuleSpecRule()); 
            pushFollow(FOLLOW_ruleRuleSpec_in_entryRuleRuleSpec2640);
            iv_ruleRuleSpec=ruleRuleSpec();

            state._fsp--;

             current =iv_ruleRuleSpec; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleRuleSpec2650); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleRuleSpec"


    // $ANTLR start "ruleRuleSpec"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1144:1: ruleRuleSpec returns [EObject current=null] : (otherlv_0= 'RULE' ( (lv_ruleSpecId_1_0= ruleRuleSpecId ) ) otherlv_2= ':' ( (lv_production_3_0= ruleProduction ) ) ( (lv_compPart_4_0= ruleCompPart ) )? otherlv_5= 'END' ) ;
    public final EObject ruleRuleSpec() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        Token otherlv_5=null;
        EObject lv_ruleSpecId_1_0 = null;

        EObject lv_production_3_0 = null;

        EObject lv_compPart_4_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1147:28: ( (otherlv_0= 'RULE' ( (lv_ruleSpecId_1_0= ruleRuleSpecId ) ) otherlv_2= ':' ( (lv_production_3_0= ruleProduction ) ) ( (lv_compPart_4_0= ruleCompPart ) )? otherlv_5= 'END' ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1148:1: (otherlv_0= 'RULE' ( (lv_ruleSpecId_1_0= ruleRuleSpecId ) ) otherlv_2= ':' ( (lv_production_3_0= ruleProduction ) ) ( (lv_compPart_4_0= ruleCompPart ) )? otherlv_5= 'END' )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1148:1: (otherlv_0= 'RULE' ( (lv_ruleSpecId_1_0= ruleRuleSpecId ) ) otherlv_2= ':' ( (lv_production_3_0= ruleProduction ) ) ( (lv_compPart_4_0= ruleCompPart ) )? otherlv_5= 'END' )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1148:3: otherlv_0= 'RULE' ( (lv_ruleSpecId_1_0= ruleRuleSpecId ) ) otherlv_2= ':' ( (lv_production_3_0= ruleProduction ) ) ( (lv_compPart_4_0= ruleCompPart ) )? otherlv_5= 'END'
            {
            otherlv_0=(Token)match(input,23,FOLLOW_23_in_ruleRuleSpec2687); 

                	newLeafNode(otherlv_0, grammarAccess.getRuleSpecAccess().getRULEKeyword_0());
                
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1152:1: ( (lv_ruleSpecId_1_0= ruleRuleSpecId ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1153:1: (lv_ruleSpecId_1_0= ruleRuleSpecId )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1153:1: (lv_ruleSpecId_1_0= ruleRuleSpecId )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1154:3: lv_ruleSpecId_1_0= ruleRuleSpecId
            {
             
            	        newCompositeNode(grammarAccess.getRuleSpecAccess().getRuleSpecIdRuleSpecIdParserRuleCall_1_0()); 
            	    
            pushFollow(FOLLOW_ruleRuleSpecId_in_ruleRuleSpec2708);
            lv_ruleSpecId_1_0=ruleRuleSpecId();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getRuleSpecRule());
            	        }
                   		set(
                   			current, 
                   			"ruleSpecId",
                    		lv_ruleSpecId_1_0, 
                    		"RuleSpecId");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_2=(Token)match(input,14,FOLLOW_14_in_ruleRuleSpec2720); 

                	newLeafNode(otherlv_2, grammarAccess.getRuleSpecAccess().getColonKeyword_2());
                
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1174:1: ( (lv_production_3_0= ruleProduction ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1175:1: (lv_production_3_0= ruleProduction )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1175:1: (lv_production_3_0= ruleProduction )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1176:3: lv_production_3_0= ruleProduction
            {
             
            	        newCompositeNode(grammarAccess.getRuleSpecAccess().getProductionProductionParserRuleCall_3_0()); 
            	    
            pushFollow(FOLLOW_ruleProduction_in_ruleRuleSpec2741);
            lv_production_3_0=ruleProduction();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getRuleSpecRule());
            	        }
                   		set(
                   			current, 
                   			"production",
                    		lv_production_3_0, 
                    		"Production");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1192:2: ( (lv_compPart_4_0= ruleCompPart ) )?
            int alt13=2;
            int LA13_0 = input.LA(1);

            if ( (LA13_0==29) ) {
                alt13=1;
            }
            switch (alt13) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1193:1: (lv_compPart_4_0= ruleCompPart )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1193:1: (lv_compPart_4_0= ruleCompPart )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1194:3: lv_compPart_4_0= ruleCompPart
                    {
                     
                    	        newCompositeNode(grammarAccess.getRuleSpecAccess().getCompPartCompPartParserRuleCall_4_0()); 
                    	    
                    pushFollow(FOLLOW_ruleCompPart_in_ruleRuleSpec2762);
                    lv_compPart_4_0=ruleCompPart();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getRuleSpecRule());
                    	        }
                           		set(
                           			current, 
                           			"compPart",
                            		lv_compPart_4_0, 
                            		"CompPart");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }
                    break;

            }

            otherlv_5=(Token)match(input,24,FOLLOW_24_in_ruleRuleSpec2775); 

                	newLeafNode(otherlv_5, grammarAccess.getRuleSpecAccess().getENDKeyword_5());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleRuleSpec"


    // $ANTLR start "entryRuleRuleSpecId"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1222:1: entryRuleRuleSpecId returns [EObject current=null] : iv_ruleRuleSpecId= ruleRuleSpecId EOF ;
    public final EObject entryRuleRuleSpecId() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRuleSpecId = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1223:2: (iv_ruleRuleSpecId= ruleRuleSpecId EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1224:2: iv_ruleRuleSpecId= ruleRuleSpecId EOF
            {
             newCompositeNode(grammarAccess.getRuleSpecIdRule()); 
            pushFollow(FOLLOW_ruleRuleSpecId_in_entryRuleRuleSpecId2811);
            iv_ruleRuleSpecId=ruleRuleSpecId();

            state._fsp--;

             current =iv_ruleRuleSpecId; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleRuleSpecId2821); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleRuleSpecId"


    // $ANTLR start "ruleRuleSpecId"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1231:1: ruleRuleSpecId returns [EObject current=null] : ( () ( (lv_ruleId_1_0= ruleRuleId ) )? ) ;
    public final EObject ruleRuleSpecId() throws RecognitionException {
        EObject current = null;

        EObject lv_ruleId_1_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1234:28: ( ( () ( (lv_ruleId_1_0= ruleRuleId ) )? ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1235:1: ( () ( (lv_ruleId_1_0= ruleRuleId ) )? )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1235:1: ( () ( (lv_ruleId_1_0= ruleRuleId ) )? )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1235:2: () ( (lv_ruleId_1_0= ruleRuleId ) )?
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1235:2: ()
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1236:5: 
            {

                    current = forceCreateModelElement(
                        grammarAccess.getRuleSpecIdAccess().getRuleSpecIdAction_0(),
                        current);
                

            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1241:2: ( (lv_ruleId_1_0= ruleRuleId ) )?
            int alt14=2;
            int LA14_0 = input.LA(1);

            if ( (LA14_0==RULE_ID) ) {
                alt14=1;
            }
            switch (alt14) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1242:1: (lv_ruleId_1_0= ruleRuleId )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1242:1: (lv_ruleId_1_0= ruleRuleId )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1243:3: lv_ruleId_1_0= ruleRuleId
                    {
                     
                    	        newCompositeNode(grammarAccess.getRuleSpecIdAccess().getRuleIdRuleIdParserRuleCall_1_0()); 
                    	    
                    pushFollow(FOLLOW_ruleRuleId_in_ruleRuleSpecId2876);
                    lv_ruleId_1_0=ruleRuleId();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getRuleSpecIdRule());
                    	        }
                           		set(
                           			current, 
                           			"ruleId",
                            		lv_ruleId_1_0, 
                            		"RuleId");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }
                    break;

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleRuleSpecId"


    // $ANTLR start "entryRuleRuleId"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1267:1: entryRuleRuleId returns [EObject current=null] : iv_ruleRuleId= ruleRuleId EOF ;
    public final EObject entryRuleRuleId() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRuleId = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1268:2: (iv_ruleRuleId= ruleRuleId EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1269:2: iv_ruleRuleId= ruleRuleId EOF
            {
             newCompositeNode(grammarAccess.getRuleIdRule()); 
            pushFollow(FOLLOW_ruleRuleId_in_entryRuleRuleId2913);
            iv_ruleRuleId=ruleRuleId();

            state._fsp--;

             current =iv_ruleRuleId; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleRuleId2923); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleRuleId"


    // $ANTLR start "ruleRuleId"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1276:1: ruleRuleId returns [EObject current=null] : ( (lv_name_0_0= RULE_ID ) ) ;
    public final EObject ruleRuleId() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;

         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1279:28: ( ( (lv_name_0_0= RULE_ID ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1280:1: ( (lv_name_0_0= RULE_ID ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1280:1: ( (lv_name_0_0= RULE_ID ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1281:1: (lv_name_0_0= RULE_ID )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1281:1: (lv_name_0_0= RULE_ID )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1282:3: lv_name_0_0= RULE_ID
            {
            lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleRuleId2964); 

            			newLeafNode(lv_name_0_0, grammarAccess.getRuleIdAccess().getNameIDTerminalRuleCall_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getRuleIdRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_0_0, 
                    		"ID");
            	    

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleRuleId"


    // $ANTLR start "entryRuleProduction"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1306:1: entryRuleProduction returns [EObject current=null] : iv_ruleProduction= ruleProduction EOF ;
    public final EObject entryRuleProduction() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleProduction = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1307:2: (iv_ruleProduction= ruleProduction EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1308:2: iv_ruleProduction= ruleProduction EOF
            {
             newCompositeNode(grammarAccess.getProductionRule()); 
            pushFollow(FOLLOW_ruleProduction_in_entryRuleProduction3004);
            iv_ruleProduction=ruleProduction();

            state._fsp--;

             current =iv_ruleProduction; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleProduction3014); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleProduction"


    // $ANTLR start "ruleProduction"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1315:1: ruleProduction returns [EObject current=null] : ( (this_SyntId_0= ruleSyntId otherlv_1= '::=' ( (lv_syntUnits_2_0= ruleSyntUnits ) ) ) | (this_SyntId_3= ruleSyntId otherlv_4= 'LISTOF' ( (lv_alts_5_0= ruleAlts ) ) ) ) ;
    public final EObject ruleProduction() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_4=null;
        EObject this_SyntId_0 = null;

        EObject lv_syntUnits_2_0 = null;

        EObject this_SyntId_3 = null;

        EObject lv_alts_5_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1318:28: ( ( (this_SyntId_0= ruleSyntId otherlv_1= '::=' ( (lv_syntUnits_2_0= ruleSyntUnits ) ) ) | (this_SyntId_3= ruleSyntId otherlv_4= 'LISTOF' ( (lv_alts_5_0= ruleAlts ) ) ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1319:1: ( (this_SyntId_0= ruleSyntId otherlv_1= '::=' ( (lv_syntUnits_2_0= ruleSyntUnits ) ) ) | (this_SyntId_3= ruleSyntId otherlv_4= 'LISTOF' ( (lv_alts_5_0= ruleAlts ) ) ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1319:1: ( (this_SyntId_0= ruleSyntId otherlv_1= '::=' ( (lv_syntUnits_2_0= ruleSyntUnits ) ) ) | (this_SyntId_3= ruleSyntId otherlv_4= 'LISTOF' ( (lv_alts_5_0= ruleAlts ) ) ) )
            int alt15=2;
            int LA15_0 = input.LA(1);

            if ( (LA15_0==RULE_ID) ) {
                int LA15_1 = input.LA(2);

                if ( (LA15_1==26) ) {
                    alt15=2;
                }
                else if ( (LA15_1==25) ) {
                    alt15=1;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 15, 1, input);

                    throw nvae;
                }
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 15, 0, input);

                throw nvae;
            }
            switch (alt15) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1319:2: (this_SyntId_0= ruleSyntId otherlv_1= '::=' ( (lv_syntUnits_2_0= ruleSyntUnits ) ) )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1319:2: (this_SyntId_0= ruleSyntId otherlv_1= '::=' ( (lv_syntUnits_2_0= ruleSyntUnits ) ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1320:5: this_SyntId_0= ruleSyntId otherlv_1= '::=' ( (lv_syntUnits_2_0= ruleSyntUnits ) )
                    {
                     
                            newCompositeNode(grammarAccess.getProductionAccess().getSyntIdParserRuleCall_0_0()); 
                        
                    pushFollow(FOLLOW_ruleSyntId_in_ruleProduction3062);
                    this_SyntId_0=ruleSyntId();

                    state._fsp--;

                     
                            current = this_SyntId_0; 
                            afterParserOrEnumRuleCall();
                        
                    otherlv_1=(Token)match(input,25,FOLLOW_25_in_ruleProduction3073); 

                        	newLeafNode(otherlv_1, grammarAccess.getProductionAccess().getColonColonEqualsSignKeyword_0_1());
                        
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1332:1: ( (lv_syntUnits_2_0= ruleSyntUnits ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1333:1: (lv_syntUnits_2_0= ruleSyntUnits )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1333:1: (lv_syntUnits_2_0= ruleSyntUnits )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1334:3: lv_syntUnits_2_0= ruleSyntUnits
                    {
                     
                    	        newCompositeNode(grammarAccess.getProductionAccess().getSyntUnitsSyntUnitsParserRuleCall_0_2_0()); 
                    	    
                    pushFollow(FOLLOW_ruleSyntUnits_in_ruleProduction3094);
                    lv_syntUnits_2_0=ruleSyntUnits();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getProductionRule());
                    	        }
                           		set(
                           			current, 
                           			"syntUnits",
                            		lv_syntUnits_2_0, 
                            		"SyntUnits");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1351:6: (this_SyntId_3= ruleSyntId otherlv_4= 'LISTOF' ( (lv_alts_5_0= ruleAlts ) ) )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1351:6: (this_SyntId_3= ruleSyntId otherlv_4= 'LISTOF' ( (lv_alts_5_0= ruleAlts ) ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1352:5: this_SyntId_3= ruleSyntId otherlv_4= 'LISTOF' ( (lv_alts_5_0= ruleAlts ) )
                    {
                     
                            newCompositeNode(grammarAccess.getProductionAccess().getSyntIdParserRuleCall_1_0()); 
                        
                    pushFollow(FOLLOW_ruleSyntId_in_ruleProduction3124);
                    this_SyntId_3=ruleSyntId();

                    state._fsp--;

                     
                            current = this_SyntId_3; 
                            afterParserOrEnumRuleCall();
                        
                    otherlv_4=(Token)match(input,26,FOLLOW_26_in_ruleProduction3135); 

                        	newLeafNode(otherlv_4, grammarAccess.getProductionAccess().getLISTOFKeyword_1_1());
                        
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1364:1: ( (lv_alts_5_0= ruleAlts ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1365:1: (lv_alts_5_0= ruleAlts )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1365:1: (lv_alts_5_0= ruleAlts )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1366:3: lv_alts_5_0= ruleAlts
                    {
                     
                    	        newCompositeNode(grammarAccess.getProductionAccess().getAltsAltsParserRuleCall_1_2_0()); 
                    	    
                    pushFollow(FOLLOW_ruleAlts_in_ruleProduction3156);
                    lv_alts_5_0=ruleAlts();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getProductionRule());
                    	        }
                           		set(
                           			current, 
                           			"alts",
                            		lv_alts_5_0, 
                            		"Alts");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }


                    }


                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleProduction"


    // $ANTLR start "entryRuleAlts"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1390:1: entryRuleAlts returns [EObject current=null] : iv_ruleAlts= ruleAlts EOF ;
    public final EObject entryRuleAlts() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAlts = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1391:2: (iv_ruleAlts= ruleAlts EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1392:2: iv_ruleAlts= ruleAlts EOF
            {
             newCompositeNode(grammarAccess.getAltsRule()); 
            pushFollow(FOLLOW_ruleAlts_in_entryRuleAlts3193);
            iv_ruleAlts=ruleAlts();

            state._fsp--;

             current =iv_ruleAlts; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAlts3203); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAlts"


    // $ANTLR start "ruleAlts"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1399:1: ruleAlts returns [EObject current=null] : ( ( (lv_alts_0_0= ruleAlt ) ) (otherlv_1= '|' ( (lv_alts_2_0= ruleAlt ) ) )* ) ;
    public final EObject ruleAlts() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_alts_0_0 = null;

        EObject lv_alts_2_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1402:28: ( ( ( (lv_alts_0_0= ruleAlt ) ) (otherlv_1= '|' ( (lv_alts_2_0= ruleAlt ) ) )* ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1403:1: ( ( (lv_alts_0_0= ruleAlt ) ) (otherlv_1= '|' ( (lv_alts_2_0= ruleAlt ) ) )* )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1403:1: ( ( (lv_alts_0_0= ruleAlt ) ) (otherlv_1= '|' ( (lv_alts_2_0= ruleAlt ) ) )* )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1403:2: ( (lv_alts_0_0= ruleAlt ) ) (otherlv_1= '|' ( (lv_alts_2_0= ruleAlt ) ) )*
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1403:2: ( (lv_alts_0_0= ruleAlt ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1404:1: (lv_alts_0_0= ruleAlt )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1404:1: (lv_alts_0_0= ruleAlt )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1405:3: lv_alts_0_0= ruleAlt
            {
             
            	        newCompositeNode(grammarAccess.getAltsAccess().getAltsAltParserRuleCall_0_0()); 
            	    
            pushFollow(FOLLOW_ruleAlt_in_ruleAlts3249);
            lv_alts_0_0=ruleAlt();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getAltsRule());
            	        }
                   		add(
                   			current, 
                   			"alts",
                    		lv_alts_0_0, 
                    		"Alt");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1421:2: (otherlv_1= '|' ( (lv_alts_2_0= ruleAlt ) ) )*
            loop16:
            do {
                int alt16=2;
                int LA16_0 = input.LA(1);

                if ( (LA16_0==27) ) {
                    alt16=1;
                }


                switch (alt16) {
            	case 1 :
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1421:4: otherlv_1= '|' ( (lv_alts_2_0= ruleAlt ) )
            	    {
            	    otherlv_1=(Token)match(input,27,FOLLOW_27_in_ruleAlts3262); 

            	        	newLeafNode(otherlv_1, grammarAccess.getAltsAccess().getVerticalLineKeyword_1_0());
            	        
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1425:1: ( (lv_alts_2_0= ruleAlt ) )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1426:1: (lv_alts_2_0= ruleAlt )
            	    {
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1426:1: (lv_alts_2_0= ruleAlt )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1427:3: lv_alts_2_0= ruleAlt
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getAltsAccess().getAltsAltParserRuleCall_1_1_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleAlt_in_ruleAlts3283);
            	    lv_alts_2_0=ruleAlt();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getAltsRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"alts",
            	            		lv_alts_2_0, 
            	            		"Alt");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop16;
                }
            } while (true);


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAlts"


    // $ANTLR start "entryRuleAlt"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1451:1: entryRuleAlt returns [EObject current=null] : iv_ruleAlt= ruleAlt EOF ;
    public final EObject entryRuleAlt() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAlt = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1452:2: (iv_ruleAlt= ruleAlt EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1453:2: iv_ruleAlt= ruleAlt EOF
            {
             newCompositeNode(grammarAccess.getAltRule()); 
            pushFollow(FOLLOW_ruleAlt_in_entryRuleAlt3321);
            iv_ruleAlt=ruleAlt();

            state._fsp--;

             current =iv_ruleAlt; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAlt3331); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAlt"


    // $ANTLR start "ruleAlt"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1460:1: ruleAlt returns [EObject current=null] : ( () ( (lv_syntId_1_0= ruleSyntId ) )? ) ;
    public final EObject ruleAlt() throws RecognitionException {
        EObject current = null;

        EObject lv_syntId_1_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1463:28: ( ( () ( (lv_syntId_1_0= ruleSyntId ) )? ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1464:1: ( () ( (lv_syntId_1_0= ruleSyntId ) )? )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1464:1: ( () ( (lv_syntId_1_0= ruleSyntId ) )? )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1464:2: () ( (lv_syntId_1_0= ruleSyntId ) )?
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1464:2: ()
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1465:5: 
            {

                    current = forceCreateModelElement(
                        grammarAccess.getAltAccess().getAltAction_0(),
                        current);
                

            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1470:2: ( (lv_syntId_1_0= ruleSyntId ) )?
            int alt17=2;
            int LA17_0 = input.LA(1);

            if ( (LA17_0==RULE_ID) ) {
                alt17=1;
            }
            switch (alt17) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1471:1: (lv_syntId_1_0= ruleSyntId )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1471:1: (lv_syntId_1_0= ruleSyntId )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1472:3: lv_syntId_1_0= ruleSyntId
                    {
                     
                    	        newCompositeNode(grammarAccess.getAltAccess().getSyntIdSyntIdParserRuleCall_1_0()); 
                    	    
                    pushFollow(FOLLOW_ruleSyntId_in_ruleAlt3386);
                    lv_syntId_1_0=ruleSyntId();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getAltRule());
                    	        }
                           		set(
                           			current, 
                           			"syntId",
                            		lv_syntId_1_0, 
                            		"SyntId");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }
                    break;

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAlt"


    // $ANTLR start "entryRuleSyntUnits"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1496:1: entryRuleSyntUnits returns [EObject current=null] : iv_ruleSyntUnits= ruleSyntUnits EOF ;
    public final EObject entryRuleSyntUnits() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSyntUnits = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1497:2: (iv_ruleSyntUnits= ruleSyntUnits EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1498:2: iv_ruleSyntUnits= ruleSyntUnits EOF
            {
             newCompositeNode(grammarAccess.getSyntUnitsRule()); 
            pushFollow(FOLLOW_ruleSyntUnits_in_entryRuleSyntUnits3423);
            iv_ruleSyntUnits=ruleSyntUnits();

            state._fsp--;

             current =iv_ruleSyntUnits; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleSyntUnits3433); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSyntUnits"


    // $ANTLR start "ruleSyntUnits"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1505:1: ruleSyntUnits returns [EObject current=null] : ( () ( (lv_syntUnits_1_0= ruleSyntUnit ) )* ) ;
    public final EObject ruleSyntUnits() throws RecognitionException {
        EObject current = null;

        EObject lv_syntUnits_1_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1508:28: ( ( () ( (lv_syntUnits_1_0= ruleSyntUnit ) )* ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1509:1: ( () ( (lv_syntUnits_1_0= ruleSyntUnit ) )* )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1509:1: ( () ( (lv_syntUnits_1_0= ruleSyntUnit ) )* )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1509:2: () ( (lv_syntUnits_1_0= ruleSyntUnit ) )*
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1509:2: ()
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1510:5: 
            {

                    current = forceCreateModelElement(
                        grammarAccess.getSyntUnitsAccess().getSyntUnitsAction_0(),
                        current);
                

            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1515:2: ( (lv_syntUnits_1_0= ruleSyntUnit ) )*
            loop18:
            do {
                int alt18=2;
                int LA18_0 = input.LA(1);

                if ( ((LA18_0>=RULE_ID && LA18_0<=RULE_STRING)||LA18_0==28) ) {
                    alt18=1;
                }


                switch (alt18) {
            	case 1 :
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1516:1: (lv_syntUnits_1_0= ruleSyntUnit )
            	    {
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1516:1: (lv_syntUnits_1_0= ruleSyntUnit )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1517:3: lv_syntUnits_1_0= ruleSyntUnit
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getSyntUnitsAccess().getSyntUnitsSyntUnitParserRuleCall_1_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleSyntUnit_in_ruleSyntUnits3488);
            	    lv_syntUnits_1_0=ruleSyntUnit();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getSyntUnitsRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"syntUnits",
            	            		lv_syntUnits_1_0, 
            	            		"SyntUnit");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop18;
                }
            } while (true);


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSyntUnits"


    // $ANTLR start "entryRuleSyntUnit"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1541:1: entryRuleSyntUnit returns [EObject current=null] : iv_ruleSyntUnit= ruleSyntUnit EOF ;
    public final EObject entryRuleSyntUnit() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSyntUnit = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1542:2: (iv_ruleSyntUnit= ruleSyntUnit EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1543:2: iv_ruleSyntUnit= ruleSyntUnit EOF
            {
             newCompositeNode(grammarAccess.getSyntUnitRule()); 
            pushFollow(FOLLOW_ruleSyntUnit_in_entryRuleSyntUnit3525);
            iv_ruleSyntUnit=ruleSyntUnit();

            state._fsp--;

             current =iv_ruleSyntUnit; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleSyntUnit3535); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSyntUnit"


    // $ANTLR start "ruleSyntUnit"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1550:1: ruleSyntUnit returns [EObject current=null] : (this_SyntId_0= ruleSyntId | (otherlv_1= '$' this_SyntId_2= ruleSyntId ) | this_SyntLit_3= ruleSyntLit ) ;
    public final EObject ruleSyntUnit() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject this_SyntId_0 = null;

        EObject this_SyntId_2 = null;

        EObject this_SyntLit_3 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1553:28: ( (this_SyntId_0= ruleSyntId | (otherlv_1= '$' this_SyntId_2= ruleSyntId ) | this_SyntLit_3= ruleSyntLit ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1554:1: (this_SyntId_0= ruleSyntId | (otherlv_1= '$' this_SyntId_2= ruleSyntId ) | this_SyntLit_3= ruleSyntLit )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1554:1: (this_SyntId_0= ruleSyntId | (otherlv_1= '$' this_SyntId_2= ruleSyntId ) | this_SyntLit_3= ruleSyntLit )
            int alt19=3;
            switch ( input.LA(1) ) {
            case RULE_ID:
                {
                alt19=1;
                }
                break;
            case 28:
                {
                alt19=2;
                }
                break;
            case RULE_STRING:
                {
                alt19=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 19, 0, input);

                throw nvae;
            }

            switch (alt19) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1555:5: this_SyntId_0= ruleSyntId
                    {
                     
                            newCompositeNode(grammarAccess.getSyntUnitAccess().getSyntIdParserRuleCall_0()); 
                        
                    pushFollow(FOLLOW_ruleSyntId_in_ruleSyntUnit3582);
                    this_SyntId_0=ruleSyntId();

                    state._fsp--;

                     
                            current = this_SyntId_0; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 2 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1564:6: (otherlv_1= '$' this_SyntId_2= ruleSyntId )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1564:6: (otherlv_1= '$' this_SyntId_2= ruleSyntId )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1564:8: otherlv_1= '$' this_SyntId_2= ruleSyntId
                    {
                    otherlv_1=(Token)match(input,28,FOLLOW_28_in_ruleSyntUnit3600); 

                        	newLeafNode(otherlv_1, grammarAccess.getSyntUnitAccess().getDollarSignKeyword_1_0());
                        
                     
                            newCompositeNode(grammarAccess.getSyntUnitAccess().getSyntIdParserRuleCall_1_1()); 
                        
                    pushFollow(FOLLOW_ruleSyntId_in_ruleSyntUnit3622);
                    this_SyntId_2=ruleSyntId();

                    state._fsp--;

                     
                            current = this_SyntId_2; 
                            afterParserOrEnumRuleCall();
                        

                    }


                    }
                    break;
                case 3 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1579:5: this_SyntLit_3= ruleSyntLit
                    {
                     
                            newCompositeNode(grammarAccess.getSyntUnitAccess().getSyntLitParserRuleCall_2()); 
                        
                    pushFollow(FOLLOW_ruleSyntLit_in_ruleSyntUnit3650);
                    this_SyntLit_3=ruleSyntLit();

                    state._fsp--;

                     
                            current = this_SyntLit_3; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSyntUnit"


    // $ANTLR start "entryRuleSyntLit"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1595:1: entryRuleSyntLit returns [EObject current=null] : iv_ruleSyntLit= ruleSyntLit EOF ;
    public final EObject entryRuleSyntLit() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSyntLit = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1596:2: (iv_ruleSyntLit= ruleSyntLit EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1597:2: iv_ruleSyntLit= ruleSyntLit EOF
            {
             newCompositeNode(grammarAccess.getSyntLitRule()); 
            pushFollow(FOLLOW_ruleSyntLit_in_entryRuleSyntLit3685);
            iv_ruleSyntLit=ruleSyntLit();

            state._fsp--;

             current =iv_ruleSyntLit; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleSyntLit3695); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSyntLit"


    // $ANTLR start "ruleSyntLit"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1604:1: ruleSyntLit returns [EObject current=null] : ( (lv_name_0_0= RULE_STRING ) ) ;
    public final EObject ruleSyntLit() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;

         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1607:28: ( ( (lv_name_0_0= RULE_STRING ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1608:1: ( (lv_name_0_0= RULE_STRING ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1608:1: ( (lv_name_0_0= RULE_STRING ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1609:1: (lv_name_0_0= RULE_STRING )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1609:1: (lv_name_0_0= RULE_STRING )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1610:3: lv_name_0_0= RULE_STRING
            {
            lv_name_0_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleSyntLit3736); 

            			newLeafNode(lv_name_0_0, grammarAccess.getSyntLitAccess().getNameSTRINGTerminalRuleCall_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getSyntLitRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_0_0, 
                    		"STRING");
            	    

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSyntLit"


    // $ANTLR start "entryRuleSyntId"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1634:1: entryRuleSyntId returns [EObject current=null] : iv_ruleSyntId= ruleSyntId EOF ;
    public final EObject entryRuleSyntId() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSyntId = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1635:2: (iv_ruleSyntId= ruleSyntId EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1636:2: iv_ruleSyntId= ruleSyntId EOF
            {
             newCompositeNode(grammarAccess.getSyntIdRule()); 
            pushFollow(FOLLOW_ruleSyntId_in_entryRuleSyntId3776);
            iv_ruleSyntId=ruleSyntId();

            state._fsp--;

             current =iv_ruleSyntId; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleSyntId3786); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSyntId"


    // $ANTLR start "ruleSyntId"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1643:1: ruleSyntId returns [EObject current=null] : ( (lv_name_0_0= RULE_ID ) ) ;
    public final EObject ruleSyntId() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;

         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1646:28: ( ( (lv_name_0_0= RULE_ID ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1647:1: ( (lv_name_0_0= RULE_ID ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1647:1: ( (lv_name_0_0= RULE_ID ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1648:1: (lv_name_0_0= RULE_ID )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1648:1: (lv_name_0_0= RULE_ID )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1649:3: lv_name_0_0= RULE_ID
            {
            lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleSyntId3827); 

            			newLeafNode(lv_name_0_0, grammarAccess.getSyntIdAccess().getNameIDTerminalRuleCall_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getSyntIdRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_0_0, 
                    		"ID");
            	    

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSyntId"


    // $ANTLR start "entryRuleCompPart"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1673:1: entryRuleCompPart returns [EObject current=null] : iv_ruleCompPart= ruleCompPart EOF ;
    public final EObject entryRuleCompPart() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleCompPart = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1674:2: (iv_ruleCompPart= ruleCompPart EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1675:2: iv_ruleCompPart= ruleCompPart EOF
            {
             newCompositeNode(grammarAccess.getCompPartRule()); 
            pushFollow(FOLLOW_ruleCompPart_in_entryRuleCompPart3867);
            iv_ruleCompPart=ruleCompPart();

            state._fsp--;

             current =iv_ruleCompPart; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleCompPart3877); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleCompPart"


    // $ANTLR start "ruleCompPart"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1682:1: ruleCompPart returns [EObject current=null] : ( () otherlv_1= 'COMPUTE' ( (lv_computations_2_0= ruleComputations ) )? ) ;
    public final EObject ruleCompPart() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_computations_2_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1685:28: ( ( () otherlv_1= 'COMPUTE' ( (lv_computations_2_0= ruleComputations ) )? ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1686:1: ( () otherlv_1= 'COMPUTE' ( (lv_computations_2_0= ruleComputations ) )? )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1686:1: ( () otherlv_1= 'COMPUTE' ( (lv_computations_2_0= ruleComputations ) )? )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1686:2: () otherlv_1= 'COMPUTE' ( (lv_computations_2_0= ruleComputations ) )?
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1686:2: ()
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1687:5: 
            {

                    current = forceCreateModelElement(
                        grammarAccess.getCompPartAccess().getCompPartAction_0(),
                        current);
                

            }

            otherlv_1=(Token)match(input,29,FOLLOW_29_in_ruleCompPart3923); 

                	newLeafNode(otherlv_1, grammarAccess.getCompPartAccess().getCOMPUTEKeyword_1());
                
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1696:1: ( (lv_computations_2_0= ruleComputations ) )?
            int alt20=2;
            int LA20_0 = input.LA(1);

            if ( ((LA20_0>=RULE_ID && LA20_0<=RULE_INT)||LA20_0==13||(LA20_0>=19 && LA20_0<=20)||(LA20_0>=32 && LA20_0<=36)||LA20_0==41||LA20_0==44||(LA20_0>=46 && LA20_0<=47)) ) {
                alt20=1;
            }
            switch (alt20) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1697:1: (lv_computations_2_0= ruleComputations )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1697:1: (lv_computations_2_0= ruleComputations )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1698:3: lv_computations_2_0= ruleComputations
                    {
                     
                    	        newCompositeNode(grammarAccess.getCompPartAccess().getComputationsComputationsParserRuleCall_2_0()); 
                    	    
                    pushFollow(FOLLOW_ruleComputations_in_ruleCompPart3944);
                    lv_computations_2_0=ruleComputations();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getCompPartRule());
                    	        }
                           		set(
                           			current, 
                           			"computations",
                            		lv_computations_2_0, 
                            		"Computations");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }
                    break;

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleCompPart"


    // $ANTLR start "entryRuleComputations"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1722:1: entryRuleComputations returns [EObject current=null] : iv_ruleComputations= ruleComputations EOF ;
    public final EObject entryRuleComputations() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleComputations = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1723:2: (iv_ruleComputations= ruleComputations EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1724:2: iv_ruleComputations= ruleComputations EOF
            {
             newCompositeNode(grammarAccess.getComputationsRule()); 
            pushFollow(FOLLOW_ruleComputations_in_entryRuleComputations3981);
            iv_ruleComputations=ruleComputations();

            state._fsp--;

             current =iv_ruleComputations; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleComputations3991); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleComputations"


    // $ANTLR start "ruleComputations"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1731:1: ruleComputations returns [EObject current=null] : ( ( (lv_computations_0_0= ruleComputation ) ) (otherlv_1= ';' ( (lv_computations_2_0= ruleComputation ) ) )* otherlv_3= ';' ) ;
    public final EObject ruleComputations() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_computations_0_0 = null;

        EObject lv_computations_2_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1734:28: ( ( ( (lv_computations_0_0= ruleComputation ) ) (otherlv_1= ';' ( (lv_computations_2_0= ruleComputation ) ) )* otherlv_3= ';' ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1735:1: ( ( (lv_computations_0_0= ruleComputation ) ) (otherlv_1= ';' ( (lv_computations_2_0= ruleComputation ) ) )* otherlv_3= ';' )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1735:1: ( ( (lv_computations_0_0= ruleComputation ) ) (otherlv_1= ';' ( (lv_computations_2_0= ruleComputation ) ) )* otherlv_3= ';' )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1735:2: ( (lv_computations_0_0= ruleComputation ) ) (otherlv_1= ';' ( (lv_computations_2_0= ruleComputation ) ) )* otherlv_3= ';'
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1735:2: ( (lv_computations_0_0= ruleComputation ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1736:1: (lv_computations_0_0= ruleComputation )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1736:1: (lv_computations_0_0= ruleComputation )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1737:3: lv_computations_0_0= ruleComputation
            {
             
            	        newCompositeNode(grammarAccess.getComputationsAccess().getComputationsComputationParserRuleCall_0_0()); 
            	    
            pushFollow(FOLLOW_ruleComputation_in_ruleComputations4037);
            lv_computations_0_0=ruleComputation();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getComputationsRule());
            	        }
                   		add(
                   			current, 
                   			"computations",
                    		lv_computations_0_0, 
                    		"Computation");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1753:2: (otherlv_1= ';' ( (lv_computations_2_0= ruleComputation ) ) )*
            loop21:
            do {
                int alt21=2;
                int LA21_0 = input.LA(1);

                if ( (LA21_0==12) ) {
                    int LA21_1 = input.LA(2);

                    if ( ((LA21_1>=RULE_ID && LA21_1<=RULE_INT)||LA21_1==13||(LA21_1>=19 && LA21_1<=20)||(LA21_1>=32 && LA21_1<=36)||LA21_1==41||LA21_1==44||(LA21_1>=46 && LA21_1<=47)) ) {
                        alt21=1;
                    }


                }


                switch (alt21) {
            	case 1 :
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1753:4: otherlv_1= ';' ( (lv_computations_2_0= ruleComputation ) )
            	    {
            	    otherlv_1=(Token)match(input,12,FOLLOW_12_in_ruleComputations4050); 

            	        	newLeafNode(otherlv_1, grammarAccess.getComputationsAccess().getSemicolonKeyword_1_0());
            	        
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1757:1: ( (lv_computations_2_0= ruleComputation ) )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1758:1: (lv_computations_2_0= ruleComputation )
            	    {
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1758:1: (lv_computations_2_0= ruleComputation )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1759:3: lv_computations_2_0= ruleComputation
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getComputationsAccess().getComputationsComputationParserRuleCall_1_1_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleComputation_in_ruleComputations4071);
            	    lv_computations_2_0=ruleComputation();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getComputationsRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"computations",
            	            		lv_computations_2_0, 
            	            		"Computation");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop21;
                }
            } while (true);

            otherlv_3=(Token)match(input,12,FOLLOW_12_in_ruleComputations4085); 

                	newLeafNode(otherlv_3, grammarAccess.getComputationsAccess().getSemicolonKeyword_2());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleComputations"


    // $ANTLR start "entryRuleComputation"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1787:1: entryRuleComputation returns [EObject current=null] : iv_ruleComputation= ruleComputation EOF ;
    public final EObject entryRuleComputation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleComputation = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1788:2: (iv_ruleComputation= ruleComputation EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1789:2: iv_ruleComputation= ruleComputation EOF
            {
             newCompositeNode(grammarAccess.getComputationRule()); 
            pushFollow(FOLLOW_ruleComputation_in_entryRuleComputation4121);
            iv_ruleComputation=ruleComputation();

            state._fsp--;

             current =iv_ruleComputation; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleComputation4131); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleComputation"


    // $ANTLR start "ruleComputation"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1796:1: ruleComputation returns [EObject current=null] : (this_Compute_0= ruleCompute (otherlv_1= 'BOTTOMUP' )? ) ;
    public final EObject ruleComputation() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject this_Compute_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1799:28: ( (this_Compute_0= ruleCompute (otherlv_1= 'BOTTOMUP' )? ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1800:1: (this_Compute_0= ruleCompute (otherlv_1= 'BOTTOMUP' )? )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1800:1: (this_Compute_0= ruleCompute (otherlv_1= 'BOTTOMUP' )? )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1801:5: this_Compute_0= ruleCompute (otherlv_1= 'BOTTOMUP' )?
            {
             
                    newCompositeNode(grammarAccess.getComputationAccess().getComputeParserRuleCall_0()); 
                
            pushFollow(FOLLOW_ruleCompute_in_ruleComputation4178);
            this_Compute_0=ruleCompute();

            state._fsp--;

             
                    current = this_Compute_0; 
                    afterParserOrEnumRuleCall();
                
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1809:1: (otherlv_1= 'BOTTOMUP' )?
            int alt22=2;
            int LA22_0 = input.LA(1);

            if ( (LA22_0==30) ) {
                alt22=1;
            }
            switch (alt22) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1809:3: otherlv_1= 'BOTTOMUP'
                    {
                    otherlv_1=(Token)match(input,30,FOLLOW_30_in_ruleComputation4190); 

                        	newLeafNode(otherlv_1, grammarAccess.getComputationAccess().getBOTTOMUPKeyword_1());
                        

                    }
                    break;

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleComputation"


    // $ANTLR start "entryRuleCompute"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1821:1: entryRuleCompute returns [EObject current=null] : iv_ruleCompute= ruleCompute EOF ;
    public final EObject entryRuleCompute() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleCompute = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1822:2: (iv_ruleCompute= ruleCompute EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1823:2: iv_ruleCompute= ruleCompute EOF
            {
             newCompositeNode(grammarAccess.getComputeRule()); 
            pushFollow(FOLLOW_ruleCompute_in_entryRuleCompute4228);
            iv_ruleCompute=ruleCompute();

            state._fsp--;

             current =iv_ruleCompute; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleCompute4238); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleCompute"


    // $ANTLR start "ruleCompute"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1830:1: ruleCompute returns [EObject current=null] : (this_AttrComp_0= ruleAttrComp | this_PlainComp_1= rulePlainComp ) ;
    public final EObject ruleCompute() throws RecognitionException {
        EObject current = null;

        EObject this_AttrComp_0 = null;

        EObject this_PlainComp_1 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1833:28: ( (this_AttrComp_0= ruleAttrComp | this_PlainComp_1= rulePlainComp ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1834:1: (this_AttrComp_0= ruleAttrComp | this_PlainComp_1= rulePlainComp )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1834:1: (this_AttrComp_0= ruleAttrComp | this_PlainComp_1= rulePlainComp )
            int alt23=2;
            alt23 = dfa23.predict(input);
            switch (alt23) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1835:5: this_AttrComp_0= ruleAttrComp
                    {
                     
                            newCompositeNode(grammarAccess.getComputeAccess().getAttrCompParserRuleCall_0()); 
                        
                    pushFollow(FOLLOW_ruleAttrComp_in_ruleCompute4285);
                    this_AttrComp_0=ruleAttrComp();

                    state._fsp--;

                     
                            current = this_AttrComp_0; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 2 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1845:5: this_PlainComp_1= rulePlainComp
                    {
                     
                            newCompositeNode(grammarAccess.getComputeAccess().getPlainCompParserRuleCall_1()); 
                        
                    pushFollow(FOLLOW_rulePlainComp_in_ruleCompute4312);
                    this_PlainComp_1=rulePlainComp();

                    state._fsp--;

                     
                            current = this_PlainComp_1; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleCompute"


    // $ANTLR start "entryRulePlainComp"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1861:1: entryRulePlainComp returns [EObject current=null] : iv_rulePlainComp= rulePlainComp EOF ;
    public final EObject entryRulePlainComp() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePlainComp = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1862:2: (iv_rulePlainComp= rulePlainComp EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1863:2: iv_rulePlainComp= rulePlainComp EOF
            {
             newCompositeNode(grammarAccess.getPlainCompRule()); 
            pushFollow(FOLLOW_rulePlainComp_in_entryRulePlainComp4347);
            iv_rulePlainComp=rulePlainComp();

            state._fsp--;

             current =iv_rulePlainComp; 
            match(input,EOF,FOLLOW_EOF_in_entryRulePlainComp4357); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRulePlainComp"


    // $ANTLR start "rulePlainComp"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1870:1: rulePlainComp returns [EObject current=null] : (this_Loop_0= ruleLoop | this_ExpressionDep_1= ruleExpressionDep ) ;
    public final EObject rulePlainComp() throws RecognitionException {
        EObject current = null;

        EObject this_Loop_0 = null;

        EObject this_ExpressionDep_1 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1873:28: ( (this_Loop_0= ruleLoop | this_ExpressionDep_1= ruleExpressionDep ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1874:1: (this_Loop_0= ruleLoop | this_ExpressionDep_1= ruleExpressionDep )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1874:1: (this_Loop_0= ruleLoop | this_ExpressionDep_1= ruleExpressionDep )
            int alt24=2;
            int LA24_0 = input.LA(1);

            if ( (LA24_0==44) ) {
                alt24=1;
            }
            else if ( (LA24_0==EOF||(LA24_0>=RULE_ID && LA24_0<=RULE_INT)||LA24_0==13||(LA24_0>=19 && LA24_0<=20)||(LA24_0>=33 && LA24_0<=36)||LA24_0==41||(LA24_0>=46 && LA24_0<=47)) ) {
                alt24=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 24, 0, input);

                throw nvae;
            }
            switch (alt24) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1875:5: this_Loop_0= ruleLoop
                    {
                     
                            newCompositeNode(grammarAccess.getPlainCompAccess().getLoopParserRuleCall_0()); 
                        
                    pushFollow(FOLLOW_ruleLoop_in_rulePlainComp4404);
                    this_Loop_0=ruleLoop();

                    state._fsp--;

                     
                            current = this_Loop_0; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 2 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1885:5: this_ExpressionDep_1= ruleExpressionDep
                    {
                     
                            newCompositeNode(grammarAccess.getPlainCompAccess().getExpressionDepParserRuleCall_1()); 
                        
                    pushFollow(FOLLOW_ruleExpressionDep_in_rulePlainComp4431);
                    this_ExpressionDep_1=ruleExpressionDep();

                    state._fsp--;

                     
                            current = this_ExpressionDep_1; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "rulePlainComp"


    // $ANTLR start "entryRuleAttrComp"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1901:1: entryRuleAttrComp returns [EObject current=null] : iv_ruleAttrComp= ruleAttrComp EOF ;
    public final EObject entryRuleAttrComp() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAttrComp = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1902:2: (iv_ruleAttrComp= ruleAttrComp EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1903:2: iv_ruleAttrComp= ruleAttrComp EOF
            {
             newCompositeNode(grammarAccess.getAttrCompRule()); 
            pushFollow(FOLLOW_ruleAttrComp_in_entryRuleAttrComp4466);
            iv_ruleAttrComp=ruleAttrComp();

            state._fsp--;

             current =iv_ruleAttrComp; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAttrComp4476); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAttrComp"


    // $ANTLR start "ruleAttrComp"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1910:1: ruleAttrComp returns [EObject current=null] : ( (this_DefAttr_0= ruleDefAttr otherlv_1= '=' ( (lv_expressionDep_2_0= ruleExpressionDep ) ) ) | (this_DefAttr_3= ruleDefAttr otherlv_4= '=' ( (lv_loop_5_0= ruleLoop ) ) ) | (otherlv_6= 'CHAINSTART' this_DefAttr_7= ruleDefAttr otherlv_8= '=' ( (lv_chainexpressionDep_9_0= ruleExpressionDep ) ) ) ) ;
    public final EObject ruleAttrComp() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        Token otherlv_8=null;
        EObject this_DefAttr_0 = null;

        EObject lv_expressionDep_2_0 = null;

        EObject this_DefAttr_3 = null;

        EObject lv_loop_5_0 = null;

        EObject this_DefAttr_7 = null;

        EObject lv_chainexpressionDep_9_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1913:28: ( ( (this_DefAttr_0= ruleDefAttr otherlv_1= '=' ( (lv_expressionDep_2_0= ruleExpressionDep ) ) ) | (this_DefAttr_3= ruleDefAttr otherlv_4= '=' ( (lv_loop_5_0= ruleLoop ) ) ) | (otherlv_6= 'CHAINSTART' this_DefAttr_7= ruleDefAttr otherlv_8= '=' ( (lv_chainexpressionDep_9_0= ruleExpressionDep ) ) ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1914:1: ( (this_DefAttr_0= ruleDefAttr otherlv_1= '=' ( (lv_expressionDep_2_0= ruleExpressionDep ) ) ) | (this_DefAttr_3= ruleDefAttr otherlv_4= '=' ( (lv_loop_5_0= ruleLoop ) ) ) | (otherlv_6= 'CHAINSTART' this_DefAttr_7= ruleDefAttr otherlv_8= '=' ( (lv_chainexpressionDep_9_0= ruleExpressionDep ) ) ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1914:1: ( (this_DefAttr_0= ruleDefAttr otherlv_1= '=' ( (lv_expressionDep_2_0= ruleExpressionDep ) ) ) | (this_DefAttr_3= ruleDefAttr otherlv_4= '=' ( (lv_loop_5_0= ruleLoop ) ) ) | (otherlv_6= 'CHAINSTART' this_DefAttr_7= ruleDefAttr otherlv_8= '=' ( (lv_chainexpressionDep_9_0= ruleExpressionDep ) ) ) )
            int alt25=3;
            alt25 = dfa25.predict(input);
            switch (alt25) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1914:2: (this_DefAttr_0= ruleDefAttr otherlv_1= '=' ( (lv_expressionDep_2_0= ruleExpressionDep ) ) )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1914:2: (this_DefAttr_0= ruleDefAttr otherlv_1= '=' ( (lv_expressionDep_2_0= ruleExpressionDep ) ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1915:5: this_DefAttr_0= ruleDefAttr otherlv_1= '=' ( (lv_expressionDep_2_0= ruleExpressionDep ) )
                    {
                     
                            newCompositeNode(grammarAccess.getAttrCompAccess().getDefAttrParserRuleCall_0_0()); 
                        
                    pushFollow(FOLLOW_ruleDefAttr_in_ruleAttrComp4524);
                    this_DefAttr_0=ruleDefAttr();

                    state._fsp--;

                     
                            current = this_DefAttr_0; 
                            afterParserOrEnumRuleCall();
                        
                    otherlv_1=(Token)match(input,31,FOLLOW_31_in_ruleAttrComp4535); 

                        	newLeafNode(otherlv_1, grammarAccess.getAttrCompAccess().getEqualsSignKeyword_0_1());
                        
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1927:1: ( (lv_expressionDep_2_0= ruleExpressionDep ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1928:1: (lv_expressionDep_2_0= ruleExpressionDep )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1928:1: (lv_expressionDep_2_0= ruleExpressionDep )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1929:3: lv_expressionDep_2_0= ruleExpressionDep
                    {
                     
                    	        newCompositeNode(grammarAccess.getAttrCompAccess().getExpressionDepExpressionDepParserRuleCall_0_2_0()); 
                    	    
                    pushFollow(FOLLOW_ruleExpressionDep_in_ruleAttrComp4556);
                    lv_expressionDep_2_0=ruleExpressionDep();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getAttrCompRule());
                    	        }
                           		set(
                           			current, 
                           			"expressionDep",
                            		lv_expressionDep_2_0, 
                            		"ExpressionDep");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1946:6: (this_DefAttr_3= ruleDefAttr otherlv_4= '=' ( (lv_loop_5_0= ruleLoop ) ) )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1946:6: (this_DefAttr_3= ruleDefAttr otherlv_4= '=' ( (lv_loop_5_0= ruleLoop ) ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1947:5: this_DefAttr_3= ruleDefAttr otherlv_4= '=' ( (lv_loop_5_0= ruleLoop ) )
                    {
                     
                            newCompositeNode(grammarAccess.getAttrCompAccess().getDefAttrParserRuleCall_1_0()); 
                        
                    pushFollow(FOLLOW_ruleDefAttr_in_ruleAttrComp4586);
                    this_DefAttr_3=ruleDefAttr();

                    state._fsp--;

                     
                            current = this_DefAttr_3; 
                            afterParserOrEnumRuleCall();
                        
                    otherlv_4=(Token)match(input,31,FOLLOW_31_in_ruleAttrComp4597); 

                        	newLeafNode(otherlv_4, grammarAccess.getAttrCompAccess().getEqualsSignKeyword_1_1());
                        
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1959:1: ( (lv_loop_5_0= ruleLoop ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1960:1: (lv_loop_5_0= ruleLoop )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1960:1: (lv_loop_5_0= ruleLoop )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1961:3: lv_loop_5_0= ruleLoop
                    {
                     
                    	        newCompositeNode(grammarAccess.getAttrCompAccess().getLoopLoopParserRuleCall_1_2_0()); 
                    	    
                    pushFollow(FOLLOW_ruleLoop_in_ruleAttrComp4618);
                    lv_loop_5_0=ruleLoop();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getAttrCompRule());
                    	        }
                           		set(
                           			current, 
                           			"loop",
                            		lv_loop_5_0, 
                            		"Loop");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }


                    }


                    }
                    break;
                case 3 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1978:6: (otherlv_6= 'CHAINSTART' this_DefAttr_7= ruleDefAttr otherlv_8= '=' ( (lv_chainexpressionDep_9_0= ruleExpressionDep ) ) )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1978:6: (otherlv_6= 'CHAINSTART' this_DefAttr_7= ruleDefAttr otherlv_8= '=' ( (lv_chainexpressionDep_9_0= ruleExpressionDep ) ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1978:8: otherlv_6= 'CHAINSTART' this_DefAttr_7= ruleDefAttr otherlv_8= '=' ( (lv_chainexpressionDep_9_0= ruleExpressionDep ) )
                    {
                    otherlv_6=(Token)match(input,32,FOLLOW_32_in_ruleAttrComp4638); 

                        	newLeafNode(otherlv_6, grammarAccess.getAttrCompAccess().getCHAINSTARTKeyword_2_0());
                        
                     
                            newCompositeNode(grammarAccess.getAttrCompAccess().getDefAttrParserRuleCall_2_1()); 
                        
                    pushFollow(FOLLOW_ruleDefAttr_in_ruleAttrComp4660);
                    this_DefAttr_7=ruleDefAttr();

                    state._fsp--;

                     
                            current = this_DefAttr_7; 
                            afterParserOrEnumRuleCall();
                        
                    otherlv_8=(Token)match(input,31,FOLLOW_31_in_ruleAttrComp4671); 

                        	newLeafNode(otherlv_8, grammarAccess.getAttrCompAccess().getEqualsSignKeyword_2_2());
                        
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1995:1: ( (lv_chainexpressionDep_9_0= ruleExpressionDep ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1996:1: (lv_chainexpressionDep_9_0= ruleExpressionDep )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1996:1: (lv_chainexpressionDep_9_0= ruleExpressionDep )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:1997:3: lv_chainexpressionDep_9_0= ruleExpressionDep
                    {
                     
                    	        newCompositeNode(grammarAccess.getAttrCompAccess().getChainexpressionDepExpressionDepParserRuleCall_2_3_0()); 
                    	    
                    pushFollow(FOLLOW_ruleExpressionDep_in_ruleAttrComp4692);
                    lv_chainexpressionDep_9_0=ruleExpressionDep();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getAttrCompRule());
                    	        }
                           		set(
                           			current, 
                           			"chainexpressionDep",
                            		lv_chainexpressionDep_9_0, 
                            		"ExpressionDep");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }


                    }


                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAttrComp"


    // $ANTLR start "entryRuleDefAttr"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2021:1: entryRuleDefAttr returns [EObject current=null] : iv_ruleDefAttr= ruleDefAttr EOF ;
    public final EObject entryRuleDefAttr() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDefAttr = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2022:2: (iv_ruleDefAttr= ruleDefAttr EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2023:2: iv_ruleDefAttr= ruleDefAttr EOF
            {
             newCompositeNode(grammarAccess.getDefAttrRule()); 
            pushFollow(FOLLOW_ruleDefAttr_in_entryRuleDefAttr4729);
            iv_ruleDefAttr=ruleDefAttr();

            state._fsp--;

             current =iv_ruleDefAttr; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleDefAttr4739); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDefAttr"


    // $ANTLR start "ruleDefAttr"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2030:1: ruleDefAttr returns [EObject current=null] : this_Attr_0= ruleAttr ;
    public final EObject ruleDefAttr() throws RecognitionException {
        EObject current = null;

        EObject this_Attr_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2033:28: (this_Attr_0= ruleAttr )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2035:5: this_Attr_0= ruleAttr
            {
             
                    newCompositeNode(grammarAccess.getDefAttrAccess().getAttrParserRuleCall()); 
                
            pushFollow(FOLLOW_ruleAttr_in_ruleDefAttr4785);
            this_Attr_0=ruleAttr();

            state._fsp--;

             
                    current = this_Attr_0; 
                    afterParserOrEnumRuleCall();
                

            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDefAttr"


    // $ANTLR start "entryRuleAttr"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2051:1: entryRuleAttr returns [EObject current=null] : iv_ruleAttr= ruleAttr EOF ;
    public final EObject entryRuleAttr() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAttr = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2052:2: (iv_ruleAttr= ruleAttr EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2053:2: iv_ruleAttr= ruleAttr EOF
            {
             newCompositeNode(grammarAccess.getAttrRule()); 
            pushFollow(FOLLOW_ruleAttr_in_entryRuleAttr4819);
            iv_ruleAttr=ruleAttr();

            state._fsp--;

             current =iv_ruleAttr; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAttr4829); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAttr"


    // $ANTLR start "ruleAttr"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2060:1: ruleAttr returns [EObject current=null] : ( ( ( (lv_symOcc_0_0= ruleSymOcc ) ) otherlv_1= '.' ( (lv_attrUseId_2_0= ruleAttrUseId ) ) ) | (otherlv_3= '.' ( (lv_attrUseId_4_0= ruleAttrUseId ) ) ) ) ;
    public final EObject ruleAttr() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_symOcc_0_0 = null;

        EObject lv_attrUseId_2_0 = null;

        EObject lv_attrUseId_4_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2063:28: ( ( ( ( (lv_symOcc_0_0= ruleSymOcc ) ) otherlv_1= '.' ( (lv_attrUseId_2_0= ruleAttrUseId ) ) ) | (otherlv_3= '.' ( (lv_attrUseId_4_0= ruleAttrUseId ) ) ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2064:1: ( ( ( (lv_symOcc_0_0= ruleSymOcc ) ) otherlv_1= '.' ( (lv_attrUseId_2_0= ruleAttrUseId ) ) ) | (otherlv_3= '.' ( (lv_attrUseId_4_0= ruleAttrUseId ) ) ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2064:1: ( ( ( (lv_symOcc_0_0= ruleSymOcc ) ) otherlv_1= '.' ( (lv_attrUseId_2_0= ruleAttrUseId ) ) ) | (otherlv_3= '.' ( (lv_attrUseId_4_0= ruleAttrUseId ) ) ) )
            int alt26=2;
            int LA26_0 = input.LA(1);

            if ( (LA26_0==RULE_ID||(LA26_0>=19 && LA26_0<=20)||(LA26_0>=34 && LA26_0<=36)) ) {
                alt26=1;
            }
            else if ( (LA26_0==33) ) {
                alt26=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 26, 0, input);

                throw nvae;
            }
            switch (alt26) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2064:2: ( ( (lv_symOcc_0_0= ruleSymOcc ) ) otherlv_1= '.' ( (lv_attrUseId_2_0= ruleAttrUseId ) ) )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2064:2: ( ( (lv_symOcc_0_0= ruleSymOcc ) ) otherlv_1= '.' ( (lv_attrUseId_2_0= ruleAttrUseId ) ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2064:3: ( (lv_symOcc_0_0= ruleSymOcc ) ) otherlv_1= '.' ( (lv_attrUseId_2_0= ruleAttrUseId ) )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2064:3: ( (lv_symOcc_0_0= ruleSymOcc ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2065:1: (lv_symOcc_0_0= ruleSymOcc )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2065:1: (lv_symOcc_0_0= ruleSymOcc )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2066:3: lv_symOcc_0_0= ruleSymOcc
                    {
                     
                    	        newCompositeNode(grammarAccess.getAttrAccess().getSymOccSymOccParserRuleCall_0_0_0()); 
                    	    
                    pushFollow(FOLLOW_ruleSymOcc_in_ruleAttr4876);
                    lv_symOcc_0_0=ruleSymOcc();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getAttrRule());
                    	        }
                           		set(
                           			current, 
                           			"symOcc",
                            		lv_symOcc_0_0, 
                            		"SymOcc");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    otherlv_1=(Token)match(input,33,FOLLOW_33_in_ruleAttr4888); 

                        	newLeafNode(otherlv_1, grammarAccess.getAttrAccess().getFullStopKeyword_0_1());
                        
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2086:1: ( (lv_attrUseId_2_0= ruleAttrUseId ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2087:1: (lv_attrUseId_2_0= ruleAttrUseId )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2087:1: (lv_attrUseId_2_0= ruleAttrUseId )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2088:3: lv_attrUseId_2_0= ruleAttrUseId
                    {
                     
                    	        newCompositeNode(grammarAccess.getAttrAccess().getAttrUseIdAttrUseIdParserRuleCall_0_2_0()); 
                    	    
                    pushFollow(FOLLOW_ruleAttrUseId_in_ruleAttr4909);
                    lv_attrUseId_2_0=ruleAttrUseId();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getAttrRule());
                    	        }
                           		set(
                           			current, 
                           			"attrUseId",
                            		lv_attrUseId_2_0, 
                            		"AttrUseId");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2105:6: (otherlv_3= '.' ( (lv_attrUseId_4_0= ruleAttrUseId ) ) )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2105:6: (otherlv_3= '.' ( (lv_attrUseId_4_0= ruleAttrUseId ) ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2105:8: otherlv_3= '.' ( (lv_attrUseId_4_0= ruleAttrUseId ) )
                    {
                    otherlv_3=(Token)match(input,33,FOLLOW_33_in_ruleAttr4929); 

                        	newLeafNode(otherlv_3, grammarAccess.getAttrAccess().getFullStopKeyword_1_0());
                        
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2109:1: ( (lv_attrUseId_4_0= ruleAttrUseId ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2110:1: (lv_attrUseId_4_0= ruleAttrUseId )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2110:1: (lv_attrUseId_4_0= ruleAttrUseId )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2111:3: lv_attrUseId_4_0= ruleAttrUseId
                    {
                     
                    	        newCompositeNode(grammarAccess.getAttrAccess().getAttrUseIdAttrUseIdParserRuleCall_1_1_0()); 
                    	    
                    pushFollow(FOLLOW_ruleAttrUseId_in_ruleAttr4950);
                    lv_attrUseId_4_0=ruleAttrUseId();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getAttrRule());
                    	        }
                           		set(
                           			current, 
                           			"attrUseId",
                            		lv_attrUseId_4_0, 
                            		"AttrUseId");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }


                    }


                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAttr"


    // $ANTLR start "entryRuleAttrUseId"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2135:1: entryRuleAttrUseId returns [EObject current=null] : iv_ruleAttrUseId= ruleAttrUseId EOF ;
    public final EObject entryRuleAttrUseId() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAttrUseId = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2136:2: (iv_ruleAttrUseId= ruleAttrUseId EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2137:2: iv_ruleAttrUseId= ruleAttrUseId EOF
            {
             newCompositeNode(grammarAccess.getAttrUseIdRule()); 
            pushFollow(FOLLOW_ruleAttrUseId_in_entryRuleAttrUseId4987);
            iv_ruleAttrUseId=ruleAttrUseId();

            state._fsp--;

             current =iv_ruleAttrUseId; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAttrUseId4997); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAttrUseId"


    // $ANTLR start "ruleAttrUseId"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2144:1: ruleAttrUseId returns [EObject current=null] : ( (lv_name_0_0= RULE_ID ) ) ;
    public final EObject ruleAttrUseId() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;

         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2147:28: ( ( (lv_name_0_0= RULE_ID ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2148:1: ( (lv_name_0_0= RULE_ID ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2148:1: ( (lv_name_0_0= RULE_ID ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2149:1: (lv_name_0_0= RULE_ID )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2149:1: (lv_name_0_0= RULE_ID )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2150:3: lv_name_0_0= RULE_ID
            {
            lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleAttrUseId5038); 

            			newLeafNode(lv_name_0_0, grammarAccess.getAttrUseIdAccess().getNameIDTerminalRuleCall_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getAttrUseIdRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_0_0, 
                    		"ID");
            	    

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAttrUseId"


    // $ANTLR start "entryRuleSymOcc"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2174:1: entryRuleSymOcc returns [EObject current=null] : iv_ruleSymOcc= ruleSymOcc EOF ;
    public final EObject entryRuleSymOcc() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSymOcc = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2175:2: (iv_ruleSymOcc= ruleSymOcc EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2176:2: iv_ruleSymOcc= ruleSymOcc EOF
            {
             newCompositeNode(grammarAccess.getSymOccRule()); 
            pushFollow(FOLLOW_ruleSymOcc_in_entryRuleSymOcc5078);
            iv_ruleSymOcc=ruleSymOcc();

            state._fsp--;

             current =iv_ruleSymOcc; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleSymOcc5088); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSymOcc"


    // $ANTLR start "ruleSymOcc"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2183:1: ruleSymOcc returns [EObject current=null] : ( () ( ( ( (lv_symbolId_1_0= ruleSymbolId ) ) ( ruleIndex )? ) | otherlv_3= 'SYNT' | otherlv_4= 'INH' | otherlv_5= 'THIS' | otherlv_6= 'HEAD' | otherlv_7= 'TAIL' ) ) ;
    public final EObject ruleSymOcc() throws RecognitionException {
        EObject current = null;

        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        EObject lv_symbolId_1_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2186:28: ( ( () ( ( ( (lv_symbolId_1_0= ruleSymbolId ) ) ( ruleIndex )? ) | otherlv_3= 'SYNT' | otherlv_4= 'INH' | otherlv_5= 'THIS' | otherlv_6= 'HEAD' | otherlv_7= 'TAIL' ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2187:1: ( () ( ( ( (lv_symbolId_1_0= ruleSymbolId ) ) ( ruleIndex )? ) | otherlv_3= 'SYNT' | otherlv_4= 'INH' | otherlv_5= 'THIS' | otherlv_6= 'HEAD' | otherlv_7= 'TAIL' ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2187:1: ( () ( ( ( (lv_symbolId_1_0= ruleSymbolId ) ) ( ruleIndex )? ) | otherlv_3= 'SYNT' | otherlv_4= 'INH' | otherlv_5= 'THIS' | otherlv_6= 'HEAD' | otherlv_7= 'TAIL' ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2187:2: () ( ( ( (lv_symbolId_1_0= ruleSymbolId ) ) ( ruleIndex )? ) | otherlv_3= 'SYNT' | otherlv_4= 'INH' | otherlv_5= 'THIS' | otherlv_6= 'HEAD' | otherlv_7= 'TAIL' )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2187:2: ()
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2188:5: 
            {

                    current = forceCreateModelElement(
                        grammarAccess.getSymOccAccess().getSymOccAction_0(),
                        current);
                

            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2193:2: ( ( ( (lv_symbolId_1_0= ruleSymbolId ) ) ( ruleIndex )? ) | otherlv_3= 'SYNT' | otherlv_4= 'INH' | otherlv_5= 'THIS' | otherlv_6= 'HEAD' | otherlv_7= 'TAIL' )
            int alt28=6;
            switch ( input.LA(1) ) {
            case RULE_ID:
                {
                alt28=1;
                }
                break;
            case 19:
                {
                alt28=2;
                }
                break;
            case 20:
                {
                alt28=3;
                }
                break;
            case 34:
                {
                alt28=4;
                }
                break;
            case 35:
                {
                alt28=5;
                }
                break;
            case 36:
                {
                alt28=6;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 28, 0, input);

                throw nvae;
            }

            switch (alt28) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2193:3: ( ( (lv_symbolId_1_0= ruleSymbolId ) ) ( ruleIndex )? )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2193:3: ( ( (lv_symbolId_1_0= ruleSymbolId ) ) ( ruleIndex )? )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2193:4: ( (lv_symbolId_1_0= ruleSymbolId ) ) ( ruleIndex )?
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2193:4: ( (lv_symbolId_1_0= ruleSymbolId ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2194:1: (lv_symbolId_1_0= ruleSymbolId )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2194:1: (lv_symbolId_1_0= ruleSymbolId )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2195:3: lv_symbolId_1_0= ruleSymbolId
                    {
                     
                    	        newCompositeNode(grammarAccess.getSymOccAccess().getSymbolIdSymbolIdParserRuleCall_1_0_0_0()); 
                    	    
                    pushFollow(FOLLOW_ruleSymbolId_in_ruleSymOcc5145);
                    lv_symbolId_1_0=ruleSymbolId();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getSymOccRule());
                    	        }
                           		set(
                           			current, 
                           			"symbolId",
                            		lv_symbolId_1_0, 
                            		"SymbolId");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2211:2: ( ruleIndex )?
                    int alt27=2;
                    int LA27_0 = input.LA(1);

                    if ( (LA27_0==37) ) {
                        alt27=1;
                    }
                    switch (alt27) {
                        case 1 :
                            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2212:5: ruleIndex
                            {
                             
                                    newCompositeNode(grammarAccess.getSymOccAccess().getIndexParserRuleCall_1_0_1()); 
                                
                            pushFollow(FOLLOW_ruleIndex_in_ruleSymOcc5162);
                            ruleIndex();

                            state._fsp--;

                             
                                    afterParserOrEnumRuleCall();
                                

                            }
                            break;

                    }


                    }


                    }
                    break;
                case 2 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2220:7: otherlv_3= 'SYNT'
                    {
                    otherlv_3=(Token)match(input,19,FOLLOW_19_in_ruleSymOcc5182); 

                        	newLeafNode(otherlv_3, grammarAccess.getSymOccAccess().getSYNTKeyword_1_1());
                        

                    }
                    break;
                case 3 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2225:7: otherlv_4= 'INH'
                    {
                    otherlv_4=(Token)match(input,20,FOLLOW_20_in_ruleSymOcc5200); 

                        	newLeafNode(otherlv_4, grammarAccess.getSymOccAccess().getINHKeyword_1_2());
                        

                    }
                    break;
                case 4 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2230:7: otherlv_5= 'THIS'
                    {
                    otherlv_5=(Token)match(input,34,FOLLOW_34_in_ruleSymOcc5218); 

                        	newLeafNode(otherlv_5, grammarAccess.getSymOccAccess().getTHISKeyword_1_3());
                        

                    }
                    break;
                case 5 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2235:7: otherlv_6= 'HEAD'
                    {
                    otherlv_6=(Token)match(input,35,FOLLOW_35_in_ruleSymOcc5236); 

                        	newLeafNode(otherlv_6, grammarAccess.getSymOccAccess().getHEADKeyword_1_4());
                        

                    }
                    break;
                case 6 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2240:7: otherlv_7= 'TAIL'
                    {
                    otherlv_7=(Token)match(input,36,FOLLOW_36_in_ruleSymOcc5254); 

                        	newLeafNode(otherlv_7, grammarAccess.getSymOccAccess().getTAILKeyword_1_5());
                        

                    }
                    break;

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSymOcc"


    // $ANTLR start "entryRuleIndex"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2252:1: entryRuleIndex returns [String current=null] : iv_ruleIndex= ruleIndex EOF ;
    public final String entryRuleIndex() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleIndex = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2253:2: (iv_ruleIndex= ruleIndex EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2254:2: iv_ruleIndex= ruleIndex EOF
            {
             newCompositeNode(grammarAccess.getIndexRule()); 
            pushFollow(FOLLOW_ruleIndex_in_entryRuleIndex5292);
            iv_ruleIndex=ruleIndex();

            state._fsp--;

             current =iv_ruleIndex.getText(); 
            match(input,EOF,FOLLOW_EOF_in_entryRuleIndex5303); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleIndex"


    // $ANTLR start "ruleIndex"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2261:1: ruleIndex returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '[' this_C_INTEGER_1= ruleC_INTEGER kw= ']' ) ;
    public final AntlrDatatypeRuleToken ruleIndex() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        AntlrDatatypeRuleToken this_C_INTEGER_1 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2264:28: ( (kw= '[' this_C_INTEGER_1= ruleC_INTEGER kw= ']' ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2265:1: (kw= '[' this_C_INTEGER_1= ruleC_INTEGER kw= ']' )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2265:1: (kw= '[' this_C_INTEGER_1= ruleC_INTEGER kw= ']' )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2266:2: kw= '[' this_C_INTEGER_1= ruleC_INTEGER kw= ']'
            {
            kw=(Token)match(input,37,FOLLOW_37_in_ruleIndex5341); 

                    current.merge(kw);
                    newLeafNode(kw, grammarAccess.getIndexAccess().getLeftSquareBracketKeyword_0()); 
                
             
                    newCompositeNode(grammarAccess.getIndexAccess().getC_INTEGERParserRuleCall_1()); 
                
            pushFollow(FOLLOW_ruleC_INTEGER_in_ruleIndex5363);
            this_C_INTEGER_1=ruleC_INTEGER();

            state._fsp--;


            		current.merge(this_C_INTEGER_1);
                
             
                    afterParserOrEnumRuleCall();
                
            kw=(Token)match(input,38,FOLLOW_38_in_ruleIndex5381); 

                    current.merge(kw);
                    newLeafNode(kw, grammarAccess.getIndexAccess().getRightSquareBracketKeyword_2()); 
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleIndex"


    // $ANTLR start "entryRuleSymbolId"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2296:1: entryRuleSymbolId returns [EObject current=null] : iv_ruleSymbolId= ruleSymbolId EOF ;
    public final EObject entryRuleSymbolId() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSymbolId = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2297:2: (iv_ruleSymbolId= ruleSymbolId EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2298:2: iv_ruleSymbolId= ruleSymbolId EOF
            {
             newCompositeNode(grammarAccess.getSymbolIdRule()); 
            pushFollow(FOLLOW_ruleSymbolId_in_entryRuleSymbolId5421);
            iv_ruleSymbolId=ruleSymbolId();

            state._fsp--;

             current =iv_ruleSymbolId; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleSymbolId5431); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSymbolId"


    // $ANTLR start "ruleSymbolId"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2305:1: ruleSymbolId returns [EObject current=null] : ( (lv_name_0_0= RULE_ID ) ) ;
    public final EObject ruleSymbolId() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;

         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2308:28: ( ( (lv_name_0_0= RULE_ID ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2309:1: ( (lv_name_0_0= RULE_ID ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2309:1: ( (lv_name_0_0= RULE_ID ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2310:1: (lv_name_0_0= RULE_ID )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2310:1: (lv_name_0_0= RULE_ID )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2311:3: lv_name_0_0= RULE_ID
            {
            lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleSymbolId5472); 

            			newLeafNode(lv_name_0_0, grammarAccess.getSymbolIdAccess().getNameIDTerminalRuleCall_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getSymbolIdRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_0_0, 
                    		"ID");
            	    

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSymbolId"


    // $ANTLR start "entryRuleExpressionDep"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2335:1: entryRuleExpressionDep returns [EObject current=null] : iv_ruleExpressionDep= ruleExpressionDep EOF ;
    public final EObject entryRuleExpressionDep() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleExpressionDep = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2336:2: (iv_ruleExpressionDep= ruleExpressionDep EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2337:2: iv_ruleExpressionDep= ruleExpressionDep EOF
            {
             newCompositeNode(grammarAccess.getExpressionDepRule()); 
            pushFollow(FOLLOW_ruleExpressionDep_in_entryRuleExpressionDep5512);
            iv_ruleExpressionDep=ruleExpressionDep();

            state._fsp--;

             current =iv_ruleExpressionDep; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleExpressionDep5522); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleExpressionDep"


    // $ANTLR start "ruleExpressionDep"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2344:1: ruleExpressionDep returns [EObject current=null] : (this_Expression_0= ruleExpression ( (lv_depClause_1_0= ruleDepClause ) )? ) ;
    public final EObject ruleExpressionDep() throws RecognitionException {
        EObject current = null;

        EObject this_Expression_0 = null;

        EObject lv_depClause_1_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2347:28: ( (this_Expression_0= ruleExpression ( (lv_depClause_1_0= ruleDepClause ) )? ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2348:1: (this_Expression_0= ruleExpression ( (lv_depClause_1_0= ruleDepClause ) )? )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2348:1: (this_Expression_0= ruleExpression ( (lv_depClause_1_0= ruleDepClause ) )? )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2349:5: this_Expression_0= ruleExpression ( (lv_depClause_1_0= ruleDepClause ) )?
            {
             
                    newCompositeNode(grammarAccess.getExpressionDepAccess().getExpressionParserRuleCall_0()); 
                
            pushFollow(FOLLOW_ruleExpression_in_ruleExpressionDep5569);
            this_Expression_0=ruleExpression();

            state._fsp--;

             
                    current = this_Expression_0; 
                    afterParserOrEnumRuleCall();
                
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2357:1: ( (lv_depClause_1_0= ruleDepClause ) )?
            int alt29=2;
            int LA29_0 = input.LA(1);

            if ( ((LA29_0>=42 && LA29_0<=43)) ) {
                alt29=1;
            }
            switch (alt29) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2358:1: (lv_depClause_1_0= ruleDepClause )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2358:1: (lv_depClause_1_0= ruleDepClause )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2359:3: lv_depClause_1_0= ruleDepClause
                    {
                     
                    	        newCompositeNode(grammarAccess.getExpressionDepAccess().getDepClauseDepClauseParserRuleCall_1_0()); 
                    	    
                    pushFollow(FOLLOW_ruleDepClause_in_ruleExpressionDep5589);
                    lv_depClause_1_0=ruleDepClause();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getExpressionDepRule());
                    	        }
                           		set(
                           			current, 
                           			"depClause",
                            		lv_depClause_1_0, 
                            		"DepClause");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }
                    break;

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleExpressionDep"


    // $ANTLR start "entryRuleExpression"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2383:1: entryRuleExpression returns [EObject current=null] : iv_ruleExpression= ruleExpression EOF ;
    public final EObject entryRuleExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleExpression = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2384:2: (iv_ruleExpression= ruleExpression EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2385:2: iv_ruleExpression= ruleExpression EOF
            {
             newCompositeNode(grammarAccess.getExpressionRule()); 
            pushFollow(FOLLOW_ruleExpression_in_entryRuleExpression5626);
            iv_ruleExpression=ruleExpression();

            state._fsp--;

             current =iv_ruleExpression; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleExpression5636); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleExpression"


    // $ANTLR start "ruleExpression"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2392:1: ruleExpression returns [EObject current=null] : ( () ( ( (lv_attr_1_0= ruleAttr ) ) | ( (lv_rhsAttrs_2_0= ruleRhsAttrs ) ) | ( ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '(' ( (lv_params_5_0= ruleParamsOpt ) ) otherlv_6= ')' ) | ( (lv_remoteExpression_7_0= ruleRemoteExpression ) ) | ( (lv_symbolRef_8_0= ruleSymbolRef ) ) | this_STRING_9= RULE_STRING | ruleC_FLOAT | ruleC_INTEGER ) ) ;
    public final EObject ruleExpression() throws RecognitionException {
        EObject current = null;

        Token lv_name_3_0=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        Token this_STRING_9=null;
        EObject lv_attr_1_0 = null;

        EObject lv_rhsAttrs_2_0 = null;

        EObject lv_params_5_0 = null;

        EObject lv_remoteExpression_7_0 = null;

        EObject lv_symbolRef_8_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2395:28: ( ( () ( ( (lv_attr_1_0= ruleAttr ) ) | ( (lv_rhsAttrs_2_0= ruleRhsAttrs ) ) | ( ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '(' ( (lv_params_5_0= ruleParamsOpt ) ) otherlv_6= ')' ) | ( (lv_remoteExpression_7_0= ruleRemoteExpression ) ) | ( (lv_symbolRef_8_0= ruleSymbolRef ) ) | this_STRING_9= RULE_STRING | ruleC_FLOAT | ruleC_INTEGER ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2396:1: ( () ( ( (lv_attr_1_0= ruleAttr ) ) | ( (lv_rhsAttrs_2_0= ruleRhsAttrs ) ) | ( ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '(' ( (lv_params_5_0= ruleParamsOpt ) ) otherlv_6= ')' ) | ( (lv_remoteExpression_7_0= ruleRemoteExpression ) ) | ( (lv_symbolRef_8_0= ruleSymbolRef ) ) | this_STRING_9= RULE_STRING | ruleC_FLOAT | ruleC_INTEGER ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2396:1: ( () ( ( (lv_attr_1_0= ruleAttr ) ) | ( (lv_rhsAttrs_2_0= ruleRhsAttrs ) ) | ( ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '(' ( (lv_params_5_0= ruleParamsOpt ) ) otherlv_6= ')' ) | ( (lv_remoteExpression_7_0= ruleRemoteExpression ) ) | ( (lv_symbolRef_8_0= ruleSymbolRef ) ) | this_STRING_9= RULE_STRING | ruleC_FLOAT | ruleC_INTEGER ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2396:2: () ( ( (lv_attr_1_0= ruleAttr ) ) | ( (lv_rhsAttrs_2_0= ruleRhsAttrs ) ) | ( ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '(' ( (lv_params_5_0= ruleParamsOpt ) ) otherlv_6= ')' ) | ( (lv_remoteExpression_7_0= ruleRemoteExpression ) ) | ( (lv_symbolRef_8_0= ruleSymbolRef ) ) | this_STRING_9= RULE_STRING | ruleC_FLOAT | ruleC_INTEGER )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2396:2: ()
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2397:5: 
            {

                    current = forceCreateModelElement(
                        grammarAccess.getExpressionAccess().getExpressionAction_0(),
                        current);
                

            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2402:2: ( ( (lv_attr_1_0= ruleAttr ) ) | ( (lv_rhsAttrs_2_0= ruleRhsAttrs ) ) | ( ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '(' ( (lv_params_5_0= ruleParamsOpt ) ) otherlv_6= ')' ) | ( (lv_remoteExpression_7_0= ruleRemoteExpression ) ) | ( (lv_symbolRef_8_0= ruleSymbolRef ) ) | this_STRING_9= RULE_STRING | ruleC_FLOAT | ruleC_INTEGER )
            int alt30=8;
            alt30 = dfa30.predict(input);
            switch (alt30) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2402:3: ( (lv_attr_1_0= ruleAttr ) )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2402:3: ( (lv_attr_1_0= ruleAttr ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2403:1: (lv_attr_1_0= ruleAttr )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2403:1: (lv_attr_1_0= ruleAttr )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2404:3: lv_attr_1_0= ruleAttr
                    {
                     
                    	        newCompositeNode(grammarAccess.getExpressionAccess().getAttrAttrParserRuleCall_1_0_0()); 
                    	    
                    pushFollow(FOLLOW_ruleAttr_in_ruleExpression5692);
                    lv_attr_1_0=ruleAttr();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getExpressionRule());
                    	        }
                           		set(
                           			current, 
                           			"attr",
                            		lv_attr_1_0, 
                            		"Attr");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }


                    }
                    break;
                case 2 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2421:6: ( (lv_rhsAttrs_2_0= ruleRhsAttrs ) )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2421:6: ( (lv_rhsAttrs_2_0= ruleRhsAttrs ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2422:1: (lv_rhsAttrs_2_0= ruleRhsAttrs )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2422:1: (lv_rhsAttrs_2_0= ruleRhsAttrs )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2423:3: lv_rhsAttrs_2_0= ruleRhsAttrs
                    {
                     
                    	        newCompositeNode(grammarAccess.getExpressionAccess().getRhsAttrsRhsAttrsParserRuleCall_1_1_0()); 
                    	    
                    pushFollow(FOLLOW_ruleRhsAttrs_in_ruleExpression5719);
                    lv_rhsAttrs_2_0=ruleRhsAttrs();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getExpressionRule());
                    	        }
                           		set(
                           			current, 
                           			"rhsAttrs",
                            		lv_rhsAttrs_2_0, 
                            		"RhsAttrs");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }


                    }
                    break;
                case 3 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2440:6: ( ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '(' ( (lv_params_5_0= ruleParamsOpt ) ) otherlv_6= ')' )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2440:6: ( ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '(' ( (lv_params_5_0= ruleParamsOpt ) ) otherlv_6= ')' )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2440:7: ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '(' ( (lv_params_5_0= ruleParamsOpt ) ) otherlv_6= ')'
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2440:7: ( (lv_name_3_0= RULE_ID ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2441:1: (lv_name_3_0= RULE_ID )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2441:1: (lv_name_3_0= RULE_ID )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2442:3: lv_name_3_0= RULE_ID
                    {
                    lv_name_3_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleExpression5743); 

                    			newLeafNode(lv_name_3_0, grammarAccess.getExpressionAccess().getNameIDTerminalRuleCall_1_2_0_0()); 
                    		

                    	        if (current==null) {
                    	            current = createModelElement(grammarAccess.getExpressionRule());
                    	        }
                           		setWithLastConsumed(
                           			current, 
                           			"name",
                            		lv_name_3_0, 
                            		"ID");
                    	    

                    }


                    }

                    otherlv_4=(Token)match(input,39,FOLLOW_39_in_ruleExpression5760); 

                        	newLeafNode(otherlv_4, grammarAccess.getExpressionAccess().getLeftParenthesisKeyword_1_2_1());
                        
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2462:1: ( (lv_params_5_0= ruleParamsOpt ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2463:1: (lv_params_5_0= ruleParamsOpt )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2463:1: (lv_params_5_0= ruleParamsOpt )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2464:3: lv_params_5_0= ruleParamsOpt
                    {
                     
                    	        newCompositeNode(grammarAccess.getExpressionAccess().getParamsParamsOptParserRuleCall_1_2_2_0()); 
                    	    
                    pushFollow(FOLLOW_ruleParamsOpt_in_ruleExpression5781);
                    lv_params_5_0=ruleParamsOpt();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getExpressionRule());
                    	        }
                           		set(
                           			current, 
                           			"params",
                            		lv_params_5_0, 
                            		"ParamsOpt");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    otherlv_6=(Token)match(input,40,FOLLOW_40_in_ruleExpression5793); 

                        	newLeafNode(otherlv_6, grammarAccess.getExpressionAccess().getRightParenthesisKeyword_1_2_3());
                        

                    }


                    }
                    break;
                case 4 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2485:6: ( (lv_remoteExpression_7_0= ruleRemoteExpression ) )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2485:6: ( (lv_remoteExpression_7_0= ruleRemoteExpression ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2486:1: (lv_remoteExpression_7_0= ruleRemoteExpression )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2486:1: (lv_remoteExpression_7_0= ruleRemoteExpression )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2487:3: lv_remoteExpression_7_0= ruleRemoteExpression
                    {
                     
                    	        newCompositeNode(grammarAccess.getExpressionAccess().getRemoteExpressionRemoteExpressionParserRuleCall_1_3_0()); 
                    	    
                    pushFollow(FOLLOW_ruleRemoteExpression_in_ruleExpression5821);
                    lv_remoteExpression_7_0=ruleRemoteExpression();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getExpressionRule());
                    	        }
                           		set(
                           			current, 
                           			"remoteExpression",
                            		lv_remoteExpression_7_0, 
                            		"RemoteExpression");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }


                    }
                    break;
                case 5 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2504:6: ( (lv_symbolRef_8_0= ruleSymbolRef ) )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2504:6: ( (lv_symbolRef_8_0= ruleSymbolRef ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2505:1: (lv_symbolRef_8_0= ruleSymbolRef )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2505:1: (lv_symbolRef_8_0= ruleSymbolRef )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2506:3: lv_symbolRef_8_0= ruleSymbolRef
                    {
                     
                    	        newCompositeNode(grammarAccess.getExpressionAccess().getSymbolRefSymbolRefParserRuleCall_1_4_0()); 
                    	    
                    pushFollow(FOLLOW_ruleSymbolRef_in_ruleExpression5848);
                    lv_symbolRef_8_0=ruleSymbolRef();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getExpressionRule());
                    	        }
                           		set(
                           			current, 
                           			"symbolRef",
                            		lv_symbolRef_8_0, 
                            		"SymbolRef");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }


                    }
                    break;
                case 6 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2523:6: this_STRING_9= RULE_STRING
                    {
                    this_STRING_9=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleExpression5865); 
                     
                        newLeafNode(this_STRING_9, grammarAccess.getExpressionAccess().getSTRINGTerminalRuleCall_1_5()); 
                        

                    }
                    break;
                case 7 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2529:5: ruleC_FLOAT
                    {
                     
                            newCompositeNode(grammarAccess.getExpressionAccess().getC_FLOATParserRuleCall_1_6()); 
                        
                    pushFollow(FOLLOW_ruleC_FLOAT_in_ruleExpression5886);
                    ruleC_FLOAT();

                    state._fsp--;

                     
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 8 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2538:5: ruleC_INTEGER
                    {
                     
                            newCompositeNode(grammarAccess.getExpressionAccess().getC_INTEGERParserRuleCall_1_7()); 
                        
                    pushFollow(FOLLOW_ruleC_INTEGER_in_ruleExpression5907);
                    ruleC_INTEGER();

                    state._fsp--;

                     
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleExpression"


    // $ANTLR start "entryRuleSymbolRef"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2553:1: entryRuleSymbolRef returns [EObject current=null] : iv_ruleSymbolRef= ruleSymbolRef EOF ;
    public final EObject entryRuleSymbolRef() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSymbolRef = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2554:2: (iv_ruleSymbolRef= ruleSymbolRef EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2555:2: iv_ruleSymbolRef= ruleSymbolRef EOF
            {
             newCompositeNode(grammarAccess.getSymbolRefRule()); 
            pushFollow(FOLLOW_ruleSymbolRef_in_entryRuleSymbolRef5943);
            iv_ruleSymbolRef=ruleSymbolRef();

            state._fsp--;

             current =iv_ruleSymbolRef; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleSymbolRef5953); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSymbolRef"


    // $ANTLR start "ruleSymbolRef"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2562:1: ruleSymbolRef returns [EObject current=null] : ( () ( ( ( (lv_symbolId_1_0= ruleSymbolId ) ) ( ruleIndex )? ) | (otherlv_3= 'TERM' ( ruleIndex )? ) ) ) ;
    public final EObject ruleSymbolRef() throws RecognitionException {
        EObject current = null;

        Token otherlv_3=null;
        EObject lv_symbolId_1_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2565:28: ( ( () ( ( ( (lv_symbolId_1_0= ruleSymbolId ) ) ( ruleIndex )? ) | (otherlv_3= 'TERM' ( ruleIndex )? ) ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2566:1: ( () ( ( ( (lv_symbolId_1_0= ruleSymbolId ) ) ( ruleIndex )? ) | (otherlv_3= 'TERM' ( ruleIndex )? ) ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2566:1: ( () ( ( ( (lv_symbolId_1_0= ruleSymbolId ) ) ( ruleIndex )? ) | (otherlv_3= 'TERM' ( ruleIndex )? ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2566:2: () ( ( ( (lv_symbolId_1_0= ruleSymbolId ) ) ( ruleIndex )? ) | (otherlv_3= 'TERM' ( ruleIndex )? ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2566:2: ()
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2567:5: 
            {

                    current = forceCreateModelElement(
                        grammarAccess.getSymbolRefAccess().getSymbolRefAction_0(),
                        current);
                

            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2572:2: ( ( ( (lv_symbolId_1_0= ruleSymbolId ) ) ( ruleIndex )? ) | (otherlv_3= 'TERM' ( ruleIndex )? ) )
            int alt33=2;
            int LA33_0 = input.LA(1);

            if ( (LA33_0==RULE_ID) ) {
                alt33=1;
            }
            else if ( (LA33_0==13) ) {
                alt33=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 33, 0, input);

                throw nvae;
            }
            switch (alt33) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2572:3: ( ( (lv_symbolId_1_0= ruleSymbolId ) ) ( ruleIndex )? )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2572:3: ( ( (lv_symbolId_1_0= ruleSymbolId ) ) ( ruleIndex )? )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2572:4: ( (lv_symbolId_1_0= ruleSymbolId ) ) ( ruleIndex )?
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2572:4: ( (lv_symbolId_1_0= ruleSymbolId ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2573:1: (lv_symbolId_1_0= ruleSymbolId )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2573:1: (lv_symbolId_1_0= ruleSymbolId )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2574:3: lv_symbolId_1_0= ruleSymbolId
                    {
                     
                    	        newCompositeNode(grammarAccess.getSymbolRefAccess().getSymbolIdSymbolIdParserRuleCall_1_0_0_0()); 
                    	    
                    pushFollow(FOLLOW_ruleSymbolId_in_ruleSymbolRef6010);
                    lv_symbolId_1_0=ruleSymbolId();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getSymbolRefRule());
                    	        }
                           		set(
                           			current, 
                           			"symbolId",
                            		lv_symbolId_1_0, 
                            		"SymbolId");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2590:2: ( ruleIndex )?
                    int alt31=2;
                    int LA31_0 = input.LA(1);

                    if ( (LA31_0==37) ) {
                        alt31=1;
                    }
                    switch (alt31) {
                        case 1 :
                            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2591:5: ruleIndex
                            {
                             
                                    newCompositeNode(grammarAccess.getSymbolRefAccess().getIndexParserRuleCall_1_0_1()); 
                                
                            pushFollow(FOLLOW_ruleIndex_in_ruleSymbolRef6027);
                            ruleIndex();

                            state._fsp--;

                             
                                    afterParserOrEnumRuleCall();
                                

                            }
                            break;

                    }


                    }


                    }
                    break;
                case 2 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2599:6: (otherlv_3= 'TERM' ( ruleIndex )? )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2599:6: (otherlv_3= 'TERM' ( ruleIndex )? )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2599:8: otherlv_3= 'TERM' ( ruleIndex )?
                    {
                    otherlv_3=(Token)match(input,13,FOLLOW_13_in_ruleSymbolRef6048); 

                        	newLeafNode(otherlv_3, grammarAccess.getSymbolRefAccess().getTERMKeyword_1_1_0());
                        
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2603:1: ( ruleIndex )?
                    int alt32=2;
                    int LA32_0 = input.LA(1);

                    if ( (LA32_0==37) ) {
                        alt32=1;
                    }
                    switch (alt32) {
                        case 1 :
                            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2604:5: ruleIndex
                            {
                             
                                    newCompositeNode(grammarAccess.getSymbolRefAccess().getIndexParserRuleCall_1_1_1()); 
                                
                            pushFollow(FOLLOW_ruleIndex_in_ruleSymbolRef6065);
                            ruleIndex();

                            state._fsp--;

                             
                                    afterParserOrEnumRuleCall();
                                

                            }
                            break;

                    }


                    }


                    }
                    break;

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSymbolRef"


    // $ANTLR start "entryRuleRhsAttrs"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2619:1: entryRuleRhsAttrs returns [EObject current=null] : iv_ruleRhsAttrs= ruleRhsAttrs EOF ;
    public final EObject entryRuleRhsAttrs() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRhsAttrs = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2620:2: (iv_ruleRhsAttrs= ruleRhsAttrs EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2621:2: iv_ruleRhsAttrs= ruleRhsAttrs EOF
            {
             newCompositeNode(grammarAccess.getRhsAttrsRule()); 
            pushFollow(FOLLOW_ruleRhsAttrs_in_entryRuleRhsAttrs6104);
            iv_ruleRhsAttrs=ruleRhsAttrs();

            state._fsp--;

             current =iv_ruleRhsAttrs; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleRhsAttrs6114); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleRhsAttrs"


    // $ANTLR start "ruleRhsAttrs"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2628:1: ruleRhsAttrs returns [EObject current=null] : (otherlv_0= 'RHS' otherlv_1= '.' ( (lv_name_2_0= RULE_ID ) ) ) ;
    public final EObject ruleRhsAttrs() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token lv_name_2_0=null;

         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2631:28: ( (otherlv_0= 'RHS' otherlv_1= '.' ( (lv_name_2_0= RULE_ID ) ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2632:1: (otherlv_0= 'RHS' otherlv_1= '.' ( (lv_name_2_0= RULE_ID ) ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2632:1: (otherlv_0= 'RHS' otherlv_1= '.' ( (lv_name_2_0= RULE_ID ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2632:3: otherlv_0= 'RHS' otherlv_1= '.' ( (lv_name_2_0= RULE_ID ) )
            {
            otherlv_0=(Token)match(input,41,FOLLOW_41_in_ruleRhsAttrs6151); 

                	newLeafNode(otherlv_0, grammarAccess.getRhsAttrsAccess().getRHSKeyword_0());
                
            otherlv_1=(Token)match(input,33,FOLLOW_33_in_ruleRhsAttrs6163); 

                	newLeafNode(otherlv_1, grammarAccess.getRhsAttrsAccess().getFullStopKeyword_1());
                
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2640:1: ( (lv_name_2_0= RULE_ID ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2641:1: (lv_name_2_0= RULE_ID )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2641:1: (lv_name_2_0= RULE_ID )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2642:3: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleRhsAttrs6180); 

            			newLeafNode(lv_name_2_0, grammarAccess.getRhsAttrsAccess().getNameIDTerminalRuleCall_2_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getRhsAttrsRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_2_0, 
                    		"ID");
            	    

            }


            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleRhsAttrs"


    // $ANTLR start "entryRuleDepClause"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2666:1: entryRuleDepClause returns [EObject current=null] : iv_ruleDepClause= ruleDepClause EOF ;
    public final EObject entryRuleDepClause() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDepClause = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2667:2: (iv_ruleDepClause= ruleDepClause EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2668:2: iv_ruleDepClause= ruleDepClause EOF
            {
             newCompositeNode(grammarAccess.getDepClauseRule()); 
            pushFollow(FOLLOW_ruleDepClause_in_entryRuleDepClause6221);
            iv_ruleDepClause=ruleDepClause();

            state._fsp--;

             current =iv_ruleDepClause; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleDepClause6231); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDepClause"


    // $ANTLR start "ruleDepClause"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2675:1: ruleDepClause returns [EObject current=null] : ( (otherlv_0= 'DEPENDS_ON' this_Dependence_1= ruleDependence ) | (otherlv_2= '<-' this_Dependence_3= ruleDependence ) ) ;
    public final EObject ruleDepClause() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        EObject this_Dependence_1 = null;

        EObject this_Dependence_3 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2678:28: ( ( (otherlv_0= 'DEPENDS_ON' this_Dependence_1= ruleDependence ) | (otherlv_2= '<-' this_Dependence_3= ruleDependence ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2679:1: ( (otherlv_0= 'DEPENDS_ON' this_Dependence_1= ruleDependence ) | (otherlv_2= '<-' this_Dependence_3= ruleDependence ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2679:1: ( (otherlv_0= 'DEPENDS_ON' this_Dependence_1= ruleDependence ) | (otherlv_2= '<-' this_Dependence_3= ruleDependence ) )
            int alt34=2;
            int LA34_0 = input.LA(1);

            if ( (LA34_0==42) ) {
                alt34=1;
            }
            else if ( (LA34_0==43) ) {
                alt34=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 34, 0, input);

                throw nvae;
            }
            switch (alt34) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2679:2: (otherlv_0= 'DEPENDS_ON' this_Dependence_1= ruleDependence )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2679:2: (otherlv_0= 'DEPENDS_ON' this_Dependence_1= ruleDependence )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2679:4: otherlv_0= 'DEPENDS_ON' this_Dependence_1= ruleDependence
                    {
                    otherlv_0=(Token)match(input,42,FOLLOW_42_in_ruleDepClause6269); 

                        	newLeafNode(otherlv_0, grammarAccess.getDepClauseAccess().getDEPENDS_ONKeyword_0_0());
                        
                     
                            newCompositeNode(grammarAccess.getDepClauseAccess().getDependenceParserRuleCall_0_1()); 
                        
                    pushFollow(FOLLOW_ruleDependence_in_ruleDepClause6291);
                    this_Dependence_1=ruleDependence();

                    state._fsp--;

                     
                            current = this_Dependence_1; 
                            afterParserOrEnumRuleCall();
                        

                    }


                    }
                    break;
                case 2 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2693:6: (otherlv_2= '<-' this_Dependence_3= ruleDependence )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2693:6: (otherlv_2= '<-' this_Dependence_3= ruleDependence )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2693:8: otherlv_2= '<-' this_Dependence_3= ruleDependence
                    {
                    otherlv_2=(Token)match(input,43,FOLLOW_43_in_ruleDepClause6310); 

                        	newLeafNode(otherlv_2, grammarAccess.getDepClauseAccess().getLessThanSignHyphenMinusKeyword_1_0());
                        
                     
                            newCompositeNode(grammarAccess.getDepClauseAccess().getDependenceParserRuleCall_1_1()); 
                        
                    pushFollow(FOLLOW_ruleDependence_in_ruleDepClause6332);
                    this_Dependence_3=ruleDependence();

                    state._fsp--;

                     
                            current = this_Dependence_3; 
                            afterParserOrEnumRuleCall();
                        

                    }


                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDepClause"


    // $ANTLR start "entryRuleDependence"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2714:1: entryRuleDependence returns [EObject current=null] : iv_ruleDependence= ruleDependence EOF ;
    public final EObject entryRuleDependence() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDependence = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2715:2: (iv_ruleDependence= ruleDependence EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2716:2: iv_ruleDependence= ruleDependence EOF
            {
             newCompositeNode(grammarAccess.getDependenceRule()); 
            pushFollow(FOLLOW_ruleDependence_in_entryRuleDependence6368);
            iv_ruleDependence=ruleDependence();

            state._fsp--;

             current =iv_ruleDependence; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleDependence6378); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDependence"


    // $ANTLR start "ruleDependence"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2723:1: ruleDependence returns [EObject current=null] : (this_DepAttr_0= ruleDepAttr | (otherlv_1= '(' this_DepAttrs_2= ruleDepAttrs otherlv_3= ')' ) ) ;
    public final EObject ruleDependence() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject this_DepAttr_0 = null;

        EObject this_DepAttrs_2 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2726:28: ( (this_DepAttr_0= ruleDepAttr | (otherlv_1= '(' this_DepAttrs_2= ruleDepAttrs otherlv_3= ')' ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2727:1: (this_DepAttr_0= ruleDepAttr | (otherlv_1= '(' this_DepAttrs_2= ruleDepAttrs otherlv_3= ')' ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2727:1: (this_DepAttr_0= ruleDepAttr | (otherlv_1= '(' this_DepAttrs_2= ruleDepAttrs otherlv_3= ')' ) )
            int alt35=2;
            int LA35_0 = input.LA(1);

            if ( (LA35_0==EOF||LA35_0==RULE_ID||(LA35_0>=19 && LA35_0<=20)||(LA35_0>=33 && LA35_0<=36)||LA35_0==41||(LA35_0>=46 && LA35_0<=47)) ) {
                alt35=1;
            }
            else if ( (LA35_0==39) ) {
                alt35=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 35, 0, input);

                throw nvae;
            }
            switch (alt35) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2728:5: this_DepAttr_0= ruleDepAttr
                    {
                     
                            newCompositeNode(grammarAccess.getDependenceAccess().getDepAttrParserRuleCall_0()); 
                        
                    pushFollow(FOLLOW_ruleDepAttr_in_ruleDependence6425);
                    this_DepAttr_0=ruleDepAttr();

                    state._fsp--;

                     
                            current = this_DepAttr_0; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 2 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2737:6: (otherlv_1= '(' this_DepAttrs_2= ruleDepAttrs otherlv_3= ')' )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2737:6: (otherlv_1= '(' this_DepAttrs_2= ruleDepAttrs otherlv_3= ')' )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2737:8: otherlv_1= '(' this_DepAttrs_2= ruleDepAttrs otherlv_3= ')'
                    {
                    otherlv_1=(Token)match(input,39,FOLLOW_39_in_ruleDependence6443); 

                        	newLeafNode(otherlv_1, grammarAccess.getDependenceAccess().getLeftParenthesisKeyword_1_0());
                        
                     
                            newCompositeNode(grammarAccess.getDependenceAccess().getDepAttrsParserRuleCall_1_1()); 
                        
                    pushFollow(FOLLOW_ruleDepAttrs_in_ruleDependence6465);
                    this_DepAttrs_2=ruleDepAttrs();

                    state._fsp--;

                     
                            current = this_DepAttrs_2; 
                            afterParserOrEnumRuleCall();
                        
                    otherlv_3=(Token)match(input,40,FOLLOW_40_in_ruleDependence6476); 

                        	newLeafNode(otherlv_3, grammarAccess.getDependenceAccess().getRightParenthesisKeyword_1_2());
                        

                    }


                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDependence"


    // $ANTLR start "entryRuleDepAttrs"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2762:1: entryRuleDepAttrs returns [EObject current=null] : iv_ruleDepAttrs= ruleDepAttrs EOF ;
    public final EObject entryRuleDepAttrs() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDepAttrs = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2763:2: (iv_ruleDepAttrs= ruleDepAttrs EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2764:2: iv_ruleDepAttrs= ruleDepAttrs EOF
            {
             newCompositeNode(grammarAccess.getDepAttrsRule()); 
            pushFollow(FOLLOW_ruleDepAttrs_in_entryRuleDepAttrs6513);
            iv_ruleDepAttrs=ruleDepAttrs();

            state._fsp--;

             current =iv_ruleDepAttrs; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleDepAttrs6523); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDepAttrs"


    // $ANTLR start "ruleDepAttrs"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2771:1: ruleDepAttrs returns [EObject current=null] : ( ( (lv_depAttrs_0_0= ruleDepAttr ) ) (otherlv_1= ',' ( (lv_depAttrs_2_0= ruleDepAttr ) ) )* ) ;
    public final EObject ruleDepAttrs() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_depAttrs_0_0 = null;

        EObject lv_depAttrs_2_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2774:28: ( ( ( (lv_depAttrs_0_0= ruleDepAttr ) ) (otherlv_1= ',' ( (lv_depAttrs_2_0= ruleDepAttr ) ) )* ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2775:1: ( ( (lv_depAttrs_0_0= ruleDepAttr ) ) (otherlv_1= ',' ( (lv_depAttrs_2_0= ruleDepAttr ) ) )* )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2775:1: ( ( (lv_depAttrs_0_0= ruleDepAttr ) ) (otherlv_1= ',' ( (lv_depAttrs_2_0= ruleDepAttr ) ) )* )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2775:2: ( (lv_depAttrs_0_0= ruleDepAttr ) ) (otherlv_1= ',' ( (lv_depAttrs_2_0= ruleDepAttr ) ) )*
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2775:2: ( (lv_depAttrs_0_0= ruleDepAttr ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2776:1: (lv_depAttrs_0_0= ruleDepAttr )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2776:1: (lv_depAttrs_0_0= ruleDepAttr )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2777:3: lv_depAttrs_0_0= ruleDepAttr
            {
             
            	        newCompositeNode(grammarAccess.getDepAttrsAccess().getDepAttrsDepAttrParserRuleCall_0_0()); 
            	    
            pushFollow(FOLLOW_ruleDepAttr_in_ruleDepAttrs6569);
            lv_depAttrs_0_0=ruleDepAttr();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getDepAttrsRule());
            	        }
                   		add(
                   			current, 
                   			"depAttrs",
                    		lv_depAttrs_0_0, 
                    		"DepAttr");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2793:2: (otherlv_1= ',' ( (lv_depAttrs_2_0= ruleDepAttr ) ) )*
            loop36:
            do {
                int alt36=2;
                int LA36_0 = input.LA(1);

                if ( (LA36_0==18) ) {
                    alt36=1;
                }


                switch (alt36) {
            	case 1 :
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2793:4: otherlv_1= ',' ( (lv_depAttrs_2_0= ruleDepAttr ) )
            	    {
            	    otherlv_1=(Token)match(input,18,FOLLOW_18_in_ruleDepAttrs6582); 

            	        	newLeafNode(otherlv_1, grammarAccess.getDepAttrsAccess().getCommaKeyword_1_0());
            	        
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2797:1: ( (lv_depAttrs_2_0= ruleDepAttr ) )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2798:1: (lv_depAttrs_2_0= ruleDepAttr )
            	    {
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2798:1: (lv_depAttrs_2_0= ruleDepAttr )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2799:3: lv_depAttrs_2_0= ruleDepAttr
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getDepAttrsAccess().getDepAttrsDepAttrParserRuleCall_1_1_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleDepAttr_in_ruleDepAttrs6603);
            	    lv_depAttrs_2_0=ruleDepAttr();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getDepAttrsRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"depAttrs",
            	            		lv_depAttrs_2_0, 
            	            		"DepAttr");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop36;
                }
            } while (true);


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDepAttrs"


    // $ANTLR start "entryRuleDepAttr"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2823:1: entryRuleDepAttr returns [EObject current=null] : iv_ruleDepAttr= ruleDepAttr EOF ;
    public final EObject entryRuleDepAttr() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDepAttr = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2824:2: (iv_ruleDepAttr= ruleDepAttr EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2825:2: iv_ruleDepAttr= ruleDepAttr EOF
            {
             newCompositeNode(grammarAccess.getDepAttrRule()); 
            pushFollow(FOLLOW_ruleDepAttr_in_entryRuleDepAttr6641);
            iv_ruleDepAttr=ruleDepAttr();

            state._fsp--;

             current =iv_ruleDepAttr; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleDepAttr6651); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDepAttr"


    // $ANTLR start "ruleDepAttr"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2832:1: ruleDepAttr returns [EObject current=null] : (this_RemoteExpression_0= ruleRemoteExpression | this_Attr_1= ruleAttr | this_RhsAttrs_2= ruleRhsAttrs ) ;
    public final EObject ruleDepAttr() throws RecognitionException {
        EObject current = null;

        EObject this_RemoteExpression_0 = null;

        EObject this_Attr_1 = null;

        EObject this_RhsAttrs_2 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2835:28: ( (this_RemoteExpression_0= ruleRemoteExpression | this_Attr_1= ruleAttr | this_RhsAttrs_2= ruleRhsAttrs ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2836:1: (this_RemoteExpression_0= ruleRemoteExpression | this_Attr_1= ruleAttr | this_RhsAttrs_2= ruleRhsAttrs )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2836:1: (this_RemoteExpression_0= ruleRemoteExpression | this_Attr_1= ruleAttr | this_RhsAttrs_2= ruleRhsAttrs )
            int alt37=3;
            alt37 = dfa37.predict(input);
            switch (alt37) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2837:5: this_RemoteExpression_0= ruleRemoteExpression
                    {
                     
                            newCompositeNode(grammarAccess.getDepAttrAccess().getRemoteExpressionParserRuleCall_0()); 
                        
                    pushFollow(FOLLOW_ruleRemoteExpression_in_ruleDepAttr6698);
                    this_RemoteExpression_0=ruleRemoteExpression();

                    state._fsp--;

                     
                            current = this_RemoteExpression_0; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 2 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2847:5: this_Attr_1= ruleAttr
                    {
                     
                            newCompositeNode(grammarAccess.getDepAttrAccess().getAttrParserRuleCall_1()); 
                        
                    pushFollow(FOLLOW_ruleAttr_in_ruleDepAttr6725);
                    this_Attr_1=ruleAttr();

                    state._fsp--;

                     
                            current = this_Attr_1; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 3 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2857:5: this_RhsAttrs_2= ruleRhsAttrs
                    {
                     
                            newCompositeNode(grammarAccess.getDepAttrAccess().getRhsAttrsParserRuleCall_2()); 
                        
                    pushFollow(FOLLOW_ruleRhsAttrs_in_ruleDepAttr6752);
                    this_RhsAttrs_2=ruleRhsAttrs();

                    state._fsp--;

                     
                            current = this_RhsAttrs_2; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDepAttr"


    // $ANTLR start "entryRuleParamsOpt"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2873:1: entryRuleParamsOpt returns [EObject current=null] : iv_ruleParamsOpt= ruleParamsOpt EOF ;
    public final EObject entryRuleParamsOpt() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleParamsOpt = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2874:2: (iv_ruleParamsOpt= ruleParamsOpt EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2875:2: iv_ruleParamsOpt= ruleParamsOpt EOF
            {
             newCompositeNode(grammarAccess.getParamsOptRule()); 
            pushFollow(FOLLOW_ruleParamsOpt_in_entryRuleParamsOpt6787);
            iv_ruleParamsOpt=ruleParamsOpt();

            state._fsp--;

             current =iv_ruleParamsOpt; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleParamsOpt6797); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleParamsOpt"


    // $ANTLR start "ruleParamsOpt"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2882:1: ruleParamsOpt returns [EObject current=null] : ( () ( (lv_params_1_0= ruleParams ) )? ) ;
    public final EObject ruleParamsOpt() throws RecognitionException {
        EObject current = null;

        EObject lv_params_1_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2885:28: ( ( () ( (lv_params_1_0= ruleParams ) )? ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2886:1: ( () ( (lv_params_1_0= ruleParams ) )? )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2886:1: ( () ( (lv_params_1_0= ruleParams ) )? )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2886:2: () ( (lv_params_1_0= ruleParams ) )?
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2886:2: ()
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2887:5: 
            {

                    current = forceCreateModelElement(
                        grammarAccess.getParamsOptAccess().getParamsOptAction_0(),
                        current);
                

            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2892:2: ( (lv_params_1_0= ruleParams ) )?
            int alt38=2;
            int LA38_0 = input.LA(1);

            if ( ((LA38_0>=RULE_ID && LA38_0<=RULE_INT)||LA38_0==13||(LA38_0>=19 && LA38_0<=20)||(LA38_0>=33 && LA38_0<=36)||LA38_0==41||(LA38_0>=46 && LA38_0<=47)) ) {
                alt38=1;
            }
            switch (alt38) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2893:1: (lv_params_1_0= ruleParams )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2893:1: (lv_params_1_0= ruleParams )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2894:3: lv_params_1_0= ruleParams
                    {
                     
                    	        newCompositeNode(grammarAccess.getParamsOptAccess().getParamsParamsParserRuleCall_1_0()); 
                    	    
                    pushFollow(FOLLOW_ruleParams_in_ruleParamsOpt6852);
                    lv_params_1_0=ruleParams();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getParamsOptRule());
                    	        }
                           		set(
                           			current, 
                           			"params",
                            		lv_params_1_0, 
                            		"Params");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }
                    break;

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleParamsOpt"


    // $ANTLR start "entryRuleParams"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2918:1: entryRuleParams returns [EObject current=null] : iv_ruleParams= ruleParams EOF ;
    public final EObject entryRuleParams() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleParams = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2919:2: (iv_ruleParams= ruleParams EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2920:2: iv_ruleParams= ruleParams EOF
            {
             newCompositeNode(grammarAccess.getParamsRule()); 
            pushFollow(FOLLOW_ruleParams_in_entryRuleParams6889);
            iv_ruleParams=ruleParams();

            state._fsp--;

             current =iv_ruleParams; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleParams6899); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleParams"


    // $ANTLR start "ruleParams"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2927:1: ruleParams returns [EObject current=null] : ( ( (lv_params_0_0= ruleParam ) ) (otherlv_1= ',' ( (lv_params_2_0= ruleParam ) ) )* ) ;
    public final EObject ruleParams() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_params_0_0 = null;

        EObject lv_params_2_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2930:28: ( ( ( (lv_params_0_0= ruleParam ) ) (otherlv_1= ',' ( (lv_params_2_0= ruleParam ) ) )* ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2931:1: ( ( (lv_params_0_0= ruleParam ) ) (otherlv_1= ',' ( (lv_params_2_0= ruleParam ) ) )* )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2931:1: ( ( (lv_params_0_0= ruleParam ) ) (otherlv_1= ',' ( (lv_params_2_0= ruleParam ) ) )* )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2931:2: ( (lv_params_0_0= ruleParam ) ) (otherlv_1= ',' ( (lv_params_2_0= ruleParam ) ) )*
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2931:2: ( (lv_params_0_0= ruleParam ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2932:1: (lv_params_0_0= ruleParam )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2932:1: (lv_params_0_0= ruleParam )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2933:3: lv_params_0_0= ruleParam
            {
             
            	        newCompositeNode(grammarAccess.getParamsAccess().getParamsParamParserRuleCall_0_0()); 
            	    
            pushFollow(FOLLOW_ruleParam_in_ruleParams6945);
            lv_params_0_0=ruleParam();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getParamsRule());
            	        }
                   		add(
                   			current, 
                   			"params",
                    		lv_params_0_0, 
                    		"Param");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2949:2: (otherlv_1= ',' ( (lv_params_2_0= ruleParam ) ) )*
            loop39:
            do {
                int alt39=2;
                int LA39_0 = input.LA(1);

                if ( (LA39_0==18) ) {
                    alt39=1;
                }


                switch (alt39) {
            	case 1 :
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2949:4: otherlv_1= ',' ( (lv_params_2_0= ruleParam ) )
            	    {
            	    otherlv_1=(Token)match(input,18,FOLLOW_18_in_ruleParams6958); 

            	        	newLeafNode(otherlv_1, grammarAccess.getParamsAccess().getCommaKeyword_1_0());
            	        
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2953:1: ( (lv_params_2_0= ruleParam ) )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2954:1: (lv_params_2_0= ruleParam )
            	    {
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2954:1: (lv_params_2_0= ruleParam )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2955:3: lv_params_2_0= ruleParam
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getParamsAccess().getParamsParamParserRuleCall_1_1_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleParam_in_ruleParams6979);
            	    lv_params_2_0=ruleParam();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getParamsRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"params",
            	            		lv_params_2_0, 
            	            		"Param");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop39;
                }
            } while (true);


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleParams"


    // $ANTLR start "entryRuleParam"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2979:1: entryRuleParam returns [EObject current=null] : iv_ruleParam= ruleParam EOF ;
    public final EObject entryRuleParam() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleParam = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2980:2: (iv_ruleParam= ruleParam EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2981:2: iv_ruleParam= ruleParam EOF
            {
             newCompositeNode(grammarAccess.getParamRule()); 
            pushFollow(FOLLOW_ruleParam_in_entryRuleParam7017);
            iv_ruleParam=ruleParam();

            state._fsp--;

             current =iv_ruleParam; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleParam7027); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleParam"


    // $ANTLR start "ruleParam"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2988:1: ruleParam returns [EObject current=null] : this_ExpressionDep_0= ruleExpressionDep ;
    public final EObject ruleParam() throws RecognitionException {
        EObject current = null;

        EObject this_ExpressionDep_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2991:28: (this_ExpressionDep_0= ruleExpressionDep )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:2993:5: this_ExpressionDep_0= ruleExpressionDep
            {
             
                    newCompositeNode(grammarAccess.getParamAccess().getExpressionDepParserRuleCall()); 
                
            pushFollow(FOLLOW_ruleExpressionDep_in_ruleParam7073);
            this_ExpressionDep_0=ruleExpressionDep();

            state._fsp--;

             
                    current = this_ExpressionDep_0; 
                    afterParserOrEnumRuleCall();
                

            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleParam"


    // $ANTLR start "entryRuleLoop"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3009:1: entryRuleLoop returns [EObject current=null] : iv_ruleLoop= ruleLoop EOF ;
    public final EObject entryRuleLoop() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleLoop = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3010:2: (iv_ruleLoop= ruleLoop EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3011:2: iv_ruleLoop= ruleLoop EOF
            {
             newCompositeNode(grammarAccess.getLoopRule()); 
            pushFollow(FOLLOW_ruleLoop_in_entryRuleLoop7107);
            iv_ruleLoop=ruleLoop();

            state._fsp--;

             current =iv_ruleLoop; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleLoop7117); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleLoop"


    // $ANTLR start "ruleLoop"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3018:1: ruleLoop returns [EObject current=null] : (otherlv_0= 'UNTIL' ( (lv_expressionDep_1_0= ruleExpressionDep ) ) otherlv_2= 'ITERATE' ( (lv_attr_3_0= ruleAttr ) ) otherlv_4= '=' ( (lv_expressionDep_right_5_0= ruleExpressionDep ) ) ) ;
    public final EObject ruleLoop() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        EObject lv_expressionDep_1_0 = null;

        EObject lv_attr_3_0 = null;

        EObject lv_expressionDep_right_5_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3021:28: ( (otherlv_0= 'UNTIL' ( (lv_expressionDep_1_0= ruleExpressionDep ) ) otherlv_2= 'ITERATE' ( (lv_attr_3_0= ruleAttr ) ) otherlv_4= '=' ( (lv_expressionDep_right_5_0= ruleExpressionDep ) ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3022:1: (otherlv_0= 'UNTIL' ( (lv_expressionDep_1_0= ruleExpressionDep ) ) otherlv_2= 'ITERATE' ( (lv_attr_3_0= ruleAttr ) ) otherlv_4= '=' ( (lv_expressionDep_right_5_0= ruleExpressionDep ) ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3022:1: (otherlv_0= 'UNTIL' ( (lv_expressionDep_1_0= ruleExpressionDep ) ) otherlv_2= 'ITERATE' ( (lv_attr_3_0= ruleAttr ) ) otherlv_4= '=' ( (lv_expressionDep_right_5_0= ruleExpressionDep ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3022:3: otherlv_0= 'UNTIL' ( (lv_expressionDep_1_0= ruleExpressionDep ) ) otherlv_2= 'ITERATE' ( (lv_attr_3_0= ruleAttr ) ) otherlv_4= '=' ( (lv_expressionDep_right_5_0= ruleExpressionDep ) )
            {
            otherlv_0=(Token)match(input,44,FOLLOW_44_in_ruleLoop7154); 

                	newLeafNode(otherlv_0, grammarAccess.getLoopAccess().getUNTILKeyword_0());
                
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3026:1: ( (lv_expressionDep_1_0= ruleExpressionDep ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3027:1: (lv_expressionDep_1_0= ruleExpressionDep )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3027:1: (lv_expressionDep_1_0= ruleExpressionDep )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3028:3: lv_expressionDep_1_0= ruleExpressionDep
            {
             
            	        newCompositeNode(grammarAccess.getLoopAccess().getExpressionDepExpressionDepParserRuleCall_1_0()); 
            	    
            pushFollow(FOLLOW_ruleExpressionDep_in_ruleLoop7175);
            lv_expressionDep_1_0=ruleExpressionDep();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getLoopRule());
            	        }
                   		set(
                   			current, 
                   			"expressionDep",
                    		lv_expressionDep_1_0, 
                    		"ExpressionDep");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_2=(Token)match(input,45,FOLLOW_45_in_ruleLoop7187); 

                	newLeafNode(otherlv_2, grammarAccess.getLoopAccess().getITERATEKeyword_2());
                
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3048:1: ( (lv_attr_3_0= ruleAttr ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3049:1: (lv_attr_3_0= ruleAttr )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3049:1: (lv_attr_3_0= ruleAttr )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3050:3: lv_attr_3_0= ruleAttr
            {
             
            	        newCompositeNode(grammarAccess.getLoopAccess().getAttrAttrParserRuleCall_3_0()); 
            	    
            pushFollow(FOLLOW_ruleAttr_in_ruleLoop7208);
            lv_attr_3_0=ruleAttr();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getLoopRule());
            	        }
                   		set(
                   			current, 
                   			"attr",
                    		lv_attr_3_0, 
                    		"Attr");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_4=(Token)match(input,31,FOLLOW_31_in_ruleLoop7220); 

                	newLeafNode(otherlv_4, grammarAccess.getLoopAccess().getEqualsSignKeyword_4());
                
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3070:1: ( (lv_expressionDep_right_5_0= ruleExpressionDep ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3071:1: (lv_expressionDep_right_5_0= ruleExpressionDep )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3071:1: (lv_expressionDep_right_5_0= ruleExpressionDep )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3072:3: lv_expressionDep_right_5_0= ruleExpressionDep
            {
             
            	        newCompositeNode(grammarAccess.getLoopAccess().getExpressionDep_rightExpressionDepParserRuleCall_5_0()); 
            	    
            pushFollow(FOLLOW_ruleExpressionDep_in_ruleLoop7241);
            lv_expressionDep_right_5_0=ruleExpressionDep();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getLoopRule());
            	        }
                   		set(
                   			current, 
                   			"expressionDep_right",
                    		lv_expressionDep_right_5_0, 
                    		"ExpressionDep");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleLoop"


    // $ANTLR start "entryRuleRemoteExpression"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3096:1: entryRuleRemoteExpression returns [EObject current=null] : iv_ruleRemoteExpression= ruleRemoteExpression EOF ;
    public final EObject entryRuleRemoteExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRemoteExpression = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3097:2: (iv_ruleRemoteExpression= ruleRemoteExpression EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3098:2: iv_ruleRemoteExpression= ruleRemoteExpression EOF
            {
             newCompositeNode(grammarAccess.getRemoteExpressionRule()); 
            pushFollow(FOLLOW_ruleRemoteExpression_in_entryRuleRemoteExpression7277);
            iv_ruleRemoteExpression=ruleRemoteExpression();

            state._fsp--;

             current =iv_ruleRemoteExpression; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleRemoteExpression7287); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleRemoteExpression"


    // $ANTLR start "ruleRemoteExpression"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3105:1: ruleRemoteExpression returns [EObject current=null] : ( (otherlv_0= 'INCLUDING' this_RemoteClause_1= ruleRemoteClause ) | (this_Subtree_2= ruleSubtree otherlv_3= 'CONSTITUENTS' ( (lv_remoteClause_4_0= ruleRemoteClause ) ) ( (lv_shield_5_0= ruleShield ) )? ( (lv_expandOpt_6_0= ruleExpandOpt ) )? ) ) ;
    public final EObject ruleRemoteExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_3=null;
        EObject this_RemoteClause_1 = null;

        EObject this_Subtree_2 = null;

        EObject lv_remoteClause_4_0 = null;

        EObject lv_shield_5_0 = null;

        EObject lv_expandOpt_6_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3108:28: ( ( (otherlv_0= 'INCLUDING' this_RemoteClause_1= ruleRemoteClause ) | (this_Subtree_2= ruleSubtree otherlv_3= 'CONSTITUENTS' ( (lv_remoteClause_4_0= ruleRemoteClause ) ) ( (lv_shield_5_0= ruleShield ) )? ( (lv_expandOpt_6_0= ruleExpandOpt ) )? ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3109:1: ( (otherlv_0= 'INCLUDING' this_RemoteClause_1= ruleRemoteClause ) | (this_Subtree_2= ruleSubtree otherlv_3= 'CONSTITUENTS' ( (lv_remoteClause_4_0= ruleRemoteClause ) ) ( (lv_shield_5_0= ruleShield ) )? ( (lv_expandOpt_6_0= ruleExpandOpt ) )? ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3109:1: ( (otherlv_0= 'INCLUDING' this_RemoteClause_1= ruleRemoteClause ) | (this_Subtree_2= ruleSubtree otherlv_3= 'CONSTITUENTS' ( (lv_remoteClause_4_0= ruleRemoteClause ) ) ( (lv_shield_5_0= ruleShield ) )? ( (lv_expandOpt_6_0= ruleExpandOpt ) )? ) )
            int alt42=2;
            int LA42_0 = input.LA(1);

            if ( (LA42_0==46) ) {
                alt42=1;
            }
            else if ( (LA42_0==EOF||LA42_0==RULE_ID||(LA42_0>=19 && LA42_0<=20)||(LA42_0>=34 && LA42_0<=36)||LA42_0==47) ) {
                alt42=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 42, 0, input);

                throw nvae;
            }
            switch (alt42) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3109:2: (otherlv_0= 'INCLUDING' this_RemoteClause_1= ruleRemoteClause )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3109:2: (otherlv_0= 'INCLUDING' this_RemoteClause_1= ruleRemoteClause )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3109:4: otherlv_0= 'INCLUDING' this_RemoteClause_1= ruleRemoteClause
                    {
                    otherlv_0=(Token)match(input,46,FOLLOW_46_in_ruleRemoteExpression7325); 

                        	newLeafNode(otherlv_0, grammarAccess.getRemoteExpressionAccess().getINCLUDINGKeyword_0_0());
                        
                     
                            newCompositeNode(grammarAccess.getRemoteExpressionAccess().getRemoteClauseParserRuleCall_0_1()); 
                        
                    pushFollow(FOLLOW_ruleRemoteClause_in_ruleRemoteExpression7347);
                    this_RemoteClause_1=ruleRemoteClause();

                    state._fsp--;

                     
                            current = this_RemoteClause_1; 
                            afterParserOrEnumRuleCall();
                        

                    }


                    }
                    break;
                case 2 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3123:6: (this_Subtree_2= ruleSubtree otherlv_3= 'CONSTITUENTS' ( (lv_remoteClause_4_0= ruleRemoteClause ) ) ( (lv_shield_5_0= ruleShield ) )? ( (lv_expandOpt_6_0= ruleExpandOpt ) )? )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3123:6: (this_Subtree_2= ruleSubtree otherlv_3= 'CONSTITUENTS' ( (lv_remoteClause_4_0= ruleRemoteClause ) ) ( (lv_shield_5_0= ruleShield ) )? ( (lv_expandOpt_6_0= ruleExpandOpt ) )? )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3124:5: this_Subtree_2= ruleSubtree otherlv_3= 'CONSTITUENTS' ( (lv_remoteClause_4_0= ruleRemoteClause ) ) ( (lv_shield_5_0= ruleShield ) )? ( (lv_expandOpt_6_0= ruleExpandOpt ) )?
                    {
                     
                            newCompositeNode(grammarAccess.getRemoteExpressionAccess().getSubtreeParserRuleCall_1_0()); 
                        
                    pushFollow(FOLLOW_ruleSubtree_in_ruleRemoteExpression7376);
                    this_Subtree_2=ruleSubtree();

                    state._fsp--;

                     
                            current = this_Subtree_2; 
                            afterParserOrEnumRuleCall();
                        
                    otherlv_3=(Token)match(input,47,FOLLOW_47_in_ruleRemoteExpression7387); 

                        	newLeafNode(otherlv_3, grammarAccess.getRemoteExpressionAccess().getCONSTITUENTSKeyword_1_1());
                        
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3136:1: ( (lv_remoteClause_4_0= ruleRemoteClause ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3137:1: (lv_remoteClause_4_0= ruleRemoteClause )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3137:1: (lv_remoteClause_4_0= ruleRemoteClause )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3138:3: lv_remoteClause_4_0= ruleRemoteClause
                    {
                     
                    	        newCompositeNode(grammarAccess.getRemoteExpressionAccess().getRemoteClauseRemoteClauseParserRuleCall_1_2_0()); 
                    	    
                    pushFollow(FOLLOW_ruleRemoteClause_in_ruleRemoteExpression7408);
                    lv_remoteClause_4_0=ruleRemoteClause();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getRemoteExpressionRule());
                    	        }
                           		set(
                           			current, 
                           			"remoteClause",
                            		lv_remoteClause_4_0, 
                            		"RemoteClause");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3154:2: ( (lv_shield_5_0= ruleShield ) )?
                    int alt40=2;
                    int LA40_0 = input.LA(1);

                    if ( (LA40_0==49) ) {
                        alt40=1;
                    }
                    switch (alt40) {
                        case 1 :
                            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3155:1: (lv_shield_5_0= ruleShield )
                            {
                            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3155:1: (lv_shield_5_0= ruleShield )
                            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3156:3: lv_shield_5_0= ruleShield
                            {
                             
                            	        newCompositeNode(grammarAccess.getRemoteExpressionAccess().getShieldShieldParserRuleCall_1_3_0()); 
                            	    
                            pushFollow(FOLLOW_ruleShield_in_ruleRemoteExpression7429);
                            lv_shield_5_0=ruleShield();

                            state._fsp--;


                            	        if (current==null) {
                            	            current = createModelElementForParent(grammarAccess.getRemoteExpressionRule());
                            	        }
                                   		set(
                                   			current, 
                                   			"shield",
                                    		lv_shield_5_0, 
                                    		"Shield");
                            	        afterParserOrEnumRuleCall();
                            	    

                            }


                            }
                            break;

                    }

                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3172:3: ( (lv_expandOpt_6_0= ruleExpandOpt ) )?
                    int alt41=2;
                    int LA41_0 = input.LA(1);

                    if ( (LA41_0==48) ) {
                        alt41=1;
                    }
                    switch (alt41) {
                        case 1 :
                            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3173:1: (lv_expandOpt_6_0= ruleExpandOpt )
                            {
                            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3173:1: (lv_expandOpt_6_0= ruleExpandOpt )
                            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3174:3: lv_expandOpt_6_0= ruleExpandOpt
                            {
                             
                            	        newCompositeNode(grammarAccess.getRemoteExpressionAccess().getExpandOptExpandOptParserRuleCall_1_4_0()); 
                            	    
                            pushFollow(FOLLOW_ruleExpandOpt_in_ruleRemoteExpression7451);
                            lv_expandOpt_6_0=ruleExpandOpt();

                            state._fsp--;


                            	        if (current==null) {
                            	            current = createModelElementForParent(grammarAccess.getRemoteExpressionRule());
                            	        }
                                   		set(
                                   			current, 
                                   			"expandOpt",
                                    		lv_expandOpt_6_0, 
                                    		"ExpandOpt");
                            	        afterParserOrEnumRuleCall();
                            	    

                            }


                            }
                            break;

                    }


                    }


                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleRemoteExpression"


    // $ANTLR start "entryRuleRemoteClause"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3198:1: entryRuleRemoteClause returns [EObject current=null] : iv_ruleRemoteClause= ruleRemoteClause EOF ;
    public final EObject entryRuleRemoteClause() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRemoteClause = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3199:2: (iv_ruleRemoteClause= ruleRemoteClause EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3200:2: iv_ruleRemoteClause= ruleRemoteClause EOF
            {
             newCompositeNode(grammarAccess.getRemoteClauseRule()); 
            pushFollow(FOLLOW_ruleRemoteClause_in_entryRuleRemoteClause7489);
            iv_ruleRemoteClause=ruleRemoteClause();

            state._fsp--;

             current =iv_ruleRemoteClause; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleRemoteClause7499); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleRemoteClause"


    // $ANTLR start "ruleRemoteClause"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3207:1: ruleRemoteClause returns [EObject current=null] : (this_RemoteAttr_0= ruleRemoteAttr | (otherlv_1= '(' this_RemoteAttrs_2= ruleRemoteAttrs otherlv_3= ')' ) ) ;
    public final EObject ruleRemoteClause() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject this_RemoteAttr_0 = null;

        EObject this_RemoteAttrs_2 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3210:28: ( (this_RemoteAttr_0= ruleRemoteAttr | (otherlv_1= '(' this_RemoteAttrs_2= ruleRemoteAttrs otherlv_3= ')' ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3211:1: (this_RemoteAttr_0= ruleRemoteAttr | (otherlv_1= '(' this_RemoteAttrs_2= ruleRemoteAttrs otherlv_3= ')' ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3211:1: (this_RemoteAttr_0= ruleRemoteAttr | (otherlv_1= '(' this_RemoteAttrs_2= ruleRemoteAttrs otherlv_3= ')' ) )
            int alt43=2;
            int LA43_0 = input.LA(1);

            if ( (LA43_0==RULE_ID) ) {
                alt43=1;
            }
            else if ( (LA43_0==39) ) {
                alt43=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 43, 0, input);

                throw nvae;
            }
            switch (alt43) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3212:5: this_RemoteAttr_0= ruleRemoteAttr
                    {
                     
                            newCompositeNode(grammarAccess.getRemoteClauseAccess().getRemoteAttrParserRuleCall_0()); 
                        
                    pushFollow(FOLLOW_ruleRemoteAttr_in_ruleRemoteClause7546);
                    this_RemoteAttr_0=ruleRemoteAttr();

                    state._fsp--;

                     
                            current = this_RemoteAttr_0; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 2 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3221:6: (otherlv_1= '(' this_RemoteAttrs_2= ruleRemoteAttrs otherlv_3= ')' )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3221:6: (otherlv_1= '(' this_RemoteAttrs_2= ruleRemoteAttrs otherlv_3= ')' )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3221:8: otherlv_1= '(' this_RemoteAttrs_2= ruleRemoteAttrs otherlv_3= ')'
                    {
                    otherlv_1=(Token)match(input,39,FOLLOW_39_in_ruleRemoteClause7564); 

                        	newLeafNode(otherlv_1, grammarAccess.getRemoteClauseAccess().getLeftParenthesisKeyword_1_0());
                        
                     
                            newCompositeNode(grammarAccess.getRemoteClauseAccess().getRemoteAttrsParserRuleCall_1_1()); 
                        
                    pushFollow(FOLLOW_ruleRemoteAttrs_in_ruleRemoteClause7586);
                    this_RemoteAttrs_2=ruleRemoteAttrs();

                    state._fsp--;

                     
                            current = this_RemoteAttrs_2; 
                            afterParserOrEnumRuleCall();
                        
                    otherlv_3=(Token)match(input,40,FOLLOW_40_in_ruleRemoteClause7597); 

                        	newLeafNode(otherlv_3, grammarAccess.getRemoteClauseAccess().getRightParenthesisKeyword_1_2());
                        

                    }


                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleRemoteClause"


    // $ANTLR start "entryRuleRemoteAttrs"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3246:1: entryRuleRemoteAttrs returns [EObject current=null] : iv_ruleRemoteAttrs= ruleRemoteAttrs EOF ;
    public final EObject entryRuleRemoteAttrs() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRemoteAttrs = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3247:2: (iv_ruleRemoteAttrs= ruleRemoteAttrs EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3248:2: iv_ruleRemoteAttrs= ruleRemoteAttrs EOF
            {
             newCompositeNode(grammarAccess.getRemoteAttrsRule()); 
            pushFollow(FOLLOW_ruleRemoteAttrs_in_entryRuleRemoteAttrs7634);
            iv_ruleRemoteAttrs=ruleRemoteAttrs();

            state._fsp--;

             current =iv_ruleRemoteAttrs; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleRemoteAttrs7644); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleRemoteAttrs"


    // $ANTLR start "ruleRemoteAttrs"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3255:1: ruleRemoteAttrs returns [EObject current=null] : ( ( (lv_remoteAttrs_0_0= ruleRemoteAttr ) ) (otherlv_1= ',' ( (lv_remoteAttrs_2_0= ruleRemoteAttr ) ) )* ) ;
    public final EObject ruleRemoteAttrs() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_remoteAttrs_0_0 = null;

        EObject lv_remoteAttrs_2_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3258:28: ( ( ( (lv_remoteAttrs_0_0= ruleRemoteAttr ) ) (otherlv_1= ',' ( (lv_remoteAttrs_2_0= ruleRemoteAttr ) ) )* ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3259:1: ( ( (lv_remoteAttrs_0_0= ruleRemoteAttr ) ) (otherlv_1= ',' ( (lv_remoteAttrs_2_0= ruleRemoteAttr ) ) )* )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3259:1: ( ( (lv_remoteAttrs_0_0= ruleRemoteAttr ) ) (otherlv_1= ',' ( (lv_remoteAttrs_2_0= ruleRemoteAttr ) ) )* )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3259:2: ( (lv_remoteAttrs_0_0= ruleRemoteAttr ) ) (otherlv_1= ',' ( (lv_remoteAttrs_2_0= ruleRemoteAttr ) ) )*
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3259:2: ( (lv_remoteAttrs_0_0= ruleRemoteAttr ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3260:1: (lv_remoteAttrs_0_0= ruleRemoteAttr )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3260:1: (lv_remoteAttrs_0_0= ruleRemoteAttr )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3261:3: lv_remoteAttrs_0_0= ruleRemoteAttr
            {
             
            	        newCompositeNode(grammarAccess.getRemoteAttrsAccess().getRemoteAttrsRemoteAttrParserRuleCall_0_0()); 
            	    
            pushFollow(FOLLOW_ruleRemoteAttr_in_ruleRemoteAttrs7690);
            lv_remoteAttrs_0_0=ruleRemoteAttr();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getRemoteAttrsRule());
            	        }
                   		add(
                   			current, 
                   			"remoteAttrs",
                    		lv_remoteAttrs_0_0, 
                    		"RemoteAttr");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3277:2: (otherlv_1= ',' ( (lv_remoteAttrs_2_0= ruleRemoteAttr ) ) )*
            loop44:
            do {
                int alt44=2;
                int LA44_0 = input.LA(1);

                if ( (LA44_0==18) ) {
                    alt44=1;
                }


                switch (alt44) {
            	case 1 :
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3277:4: otherlv_1= ',' ( (lv_remoteAttrs_2_0= ruleRemoteAttr ) )
            	    {
            	    otherlv_1=(Token)match(input,18,FOLLOW_18_in_ruleRemoteAttrs7703); 

            	        	newLeafNode(otherlv_1, grammarAccess.getRemoteAttrsAccess().getCommaKeyword_1_0());
            	        
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3281:1: ( (lv_remoteAttrs_2_0= ruleRemoteAttr ) )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3282:1: (lv_remoteAttrs_2_0= ruleRemoteAttr )
            	    {
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3282:1: (lv_remoteAttrs_2_0= ruleRemoteAttr )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3283:3: lv_remoteAttrs_2_0= ruleRemoteAttr
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getRemoteAttrsAccess().getRemoteAttrsRemoteAttrParserRuleCall_1_1_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleRemoteAttr_in_ruleRemoteAttrs7724);
            	    lv_remoteAttrs_2_0=ruleRemoteAttr();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getRemoteAttrsRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"remoteAttrs",
            	            		lv_remoteAttrs_2_0, 
            	            		"RemoteAttr");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop44;
                }
            } while (true);


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleRemoteAttrs"


    // $ANTLR start "entryRuleRemoteAttr"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3307:1: entryRuleRemoteAttr returns [EObject current=null] : iv_ruleRemoteAttr= ruleRemoteAttr EOF ;
    public final EObject entryRuleRemoteAttr() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRemoteAttr = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3308:2: (iv_ruleRemoteAttr= ruleRemoteAttr EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3309:2: iv_ruleRemoteAttr= ruleRemoteAttr EOF
            {
             newCompositeNode(grammarAccess.getRemoteAttrRule()); 
            pushFollow(FOLLOW_ruleRemoteAttr_in_entryRuleRemoteAttr7762);
            iv_ruleRemoteAttr=ruleRemoteAttr();

            state._fsp--;

             current =iv_ruleRemoteAttr; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleRemoteAttr7772); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleRemoteAttr"


    // $ANTLR start "ruleRemoteAttr"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3316:1: ruleRemoteAttr returns [EObject current=null] : (this_SymbolId_0= ruleSymbolId otherlv_1= '.' ( (lv_attrUseId_2_0= ruleAttrUseId ) ) ) ;
    public final EObject ruleRemoteAttr() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject this_SymbolId_0 = null;

        EObject lv_attrUseId_2_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3319:28: ( (this_SymbolId_0= ruleSymbolId otherlv_1= '.' ( (lv_attrUseId_2_0= ruleAttrUseId ) ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3320:1: (this_SymbolId_0= ruleSymbolId otherlv_1= '.' ( (lv_attrUseId_2_0= ruleAttrUseId ) ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3320:1: (this_SymbolId_0= ruleSymbolId otherlv_1= '.' ( (lv_attrUseId_2_0= ruleAttrUseId ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3321:5: this_SymbolId_0= ruleSymbolId otherlv_1= '.' ( (lv_attrUseId_2_0= ruleAttrUseId ) )
            {
             
                    newCompositeNode(grammarAccess.getRemoteAttrAccess().getSymbolIdParserRuleCall_0()); 
                
            pushFollow(FOLLOW_ruleSymbolId_in_ruleRemoteAttr7819);
            this_SymbolId_0=ruleSymbolId();

            state._fsp--;

             
                    current = this_SymbolId_0; 
                    afterParserOrEnumRuleCall();
                
            otherlv_1=(Token)match(input,33,FOLLOW_33_in_ruleRemoteAttr7830); 

                	newLeafNode(otherlv_1, grammarAccess.getRemoteAttrAccess().getFullStopKeyword_1());
                
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3333:1: ( (lv_attrUseId_2_0= ruleAttrUseId ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3334:1: (lv_attrUseId_2_0= ruleAttrUseId )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3334:1: (lv_attrUseId_2_0= ruleAttrUseId )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3335:3: lv_attrUseId_2_0= ruleAttrUseId
            {
             
            	        newCompositeNode(grammarAccess.getRemoteAttrAccess().getAttrUseIdAttrUseIdParserRuleCall_2_0()); 
            	    
            pushFollow(FOLLOW_ruleAttrUseId_in_ruleRemoteAttr7851);
            lv_attrUseId_2_0=ruleAttrUseId();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getRemoteAttrRule());
            	        }
                   		set(
                   			current, 
                   			"attrUseId",
                    		lv_attrUseId_2_0, 
                    		"AttrUseId");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleRemoteAttr"


    // $ANTLR start "entryRuleExpandOpt"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3359:1: entryRuleExpandOpt returns [EObject current=null] : iv_ruleExpandOpt= ruleExpandOpt EOF ;
    public final EObject entryRuleExpandOpt() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleExpandOpt = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3360:2: (iv_ruleExpandOpt= ruleExpandOpt EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3361:2: iv_ruleExpandOpt= ruleExpandOpt EOF
            {
             newCompositeNode(grammarAccess.getExpandOptRule()); 
            pushFollow(FOLLOW_ruleExpandOpt_in_entryRuleExpandOpt7887);
            iv_ruleExpandOpt=ruleExpandOpt();

            state._fsp--;

             current =iv_ruleExpandOpt; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleExpandOpt7897); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleExpandOpt"


    // $ANTLR start "ruleExpandOpt"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3368:1: ruleExpandOpt returns [EObject current=null] : (otherlv_0= 'WITH' otherlv_1= '(' this_TypeId_2= ruleTypeId otherlv_3= ',' this_ID_4= RULE_ID otherlv_5= ',' this_ID_6= RULE_ID otherlv_7= ',' this_ID_8= RULE_ID otherlv_9= ')' ) ;
    public final EObject ruleExpandOpt() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token this_ID_4=null;
        Token otherlv_5=null;
        Token this_ID_6=null;
        Token otherlv_7=null;
        Token this_ID_8=null;
        Token otherlv_9=null;
        EObject this_TypeId_2 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3371:28: ( (otherlv_0= 'WITH' otherlv_1= '(' this_TypeId_2= ruleTypeId otherlv_3= ',' this_ID_4= RULE_ID otherlv_5= ',' this_ID_6= RULE_ID otherlv_7= ',' this_ID_8= RULE_ID otherlv_9= ')' ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3372:1: (otherlv_0= 'WITH' otherlv_1= '(' this_TypeId_2= ruleTypeId otherlv_3= ',' this_ID_4= RULE_ID otherlv_5= ',' this_ID_6= RULE_ID otherlv_7= ',' this_ID_8= RULE_ID otherlv_9= ')' )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3372:1: (otherlv_0= 'WITH' otherlv_1= '(' this_TypeId_2= ruleTypeId otherlv_3= ',' this_ID_4= RULE_ID otherlv_5= ',' this_ID_6= RULE_ID otherlv_7= ',' this_ID_8= RULE_ID otherlv_9= ')' )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3372:3: otherlv_0= 'WITH' otherlv_1= '(' this_TypeId_2= ruleTypeId otherlv_3= ',' this_ID_4= RULE_ID otherlv_5= ',' this_ID_6= RULE_ID otherlv_7= ',' this_ID_8= RULE_ID otherlv_9= ')'
            {
            otherlv_0=(Token)match(input,48,FOLLOW_48_in_ruleExpandOpt7934); 

                	newLeafNode(otherlv_0, grammarAccess.getExpandOptAccess().getWITHKeyword_0());
                
            otherlv_1=(Token)match(input,39,FOLLOW_39_in_ruleExpandOpt7946); 

                	newLeafNode(otherlv_1, grammarAccess.getExpandOptAccess().getLeftParenthesisKeyword_1());
                
             
                    newCompositeNode(grammarAccess.getExpandOptAccess().getTypeIdParserRuleCall_2()); 
                
            pushFollow(FOLLOW_ruleTypeId_in_ruleExpandOpt7968);
            this_TypeId_2=ruleTypeId();

            state._fsp--;

             
                    current = this_TypeId_2; 
                    afterParserOrEnumRuleCall();
                
            otherlv_3=(Token)match(input,18,FOLLOW_18_in_ruleExpandOpt7979); 

                	newLeafNode(otherlv_3, grammarAccess.getExpandOptAccess().getCommaKeyword_3());
                
            this_ID_4=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleExpandOpt7990); 
             
                newLeafNode(this_ID_4, grammarAccess.getExpandOptAccess().getIDTerminalRuleCall_4()); 
                
            otherlv_5=(Token)match(input,18,FOLLOW_18_in_ruleExpandOpt8001); 

                	newLeafNode(otherlv_5, grammarAccess.getExpandOptAccess().getCommaKeyword_5());
                
            this_ID_6=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleExpandOpt8012); 
             
                newLeafNode(this_ID_6, grammarAccess.getExpandOptAccess().getIDTerminalRuleCall_6()); 
                
            otherlv_7=(Token)match(input,18,FOLLOW_18_in_ruleExpandOpt8023); 

                	newLeafNode(otherlv_7, grammarAccess.getExpandOptAccess().getCommaKeyword_7());
                
            this_ID_8=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleExpandOpt8034); 
             
                newLeafNode(this_ID_8, grammarAccess.getExpandOptAccess().getIDTerminalRuleCall_8()); 
                
            otherlv_9=(Token)match(input,40,FOLLOW_40_in_ruleExpandOpt8045); 

                	newLeafNode(otherlv_9, grammarAccess.getExpandOptAccess().getRightParenthesisKeyword_9());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleExpandOpt"


    // $ANTLR start "entryRuleSubtree"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3425:1: entryRuleSubtree returns [EObject current=null] : iv_ruleSubtree= ruleSubtree EOF ;
    public final EObject entryRuleSubtree() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSubtree = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3426:2: (iv_ruleSubtree= ruleSubtree EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3427:2: iv_ruleSubtree= ruleSubtree EOF
            {
             newCompositeNode(grammarAccess.getSubtreeRule()); 
            pushFollow(FOLLOW_ruleSubtree_in_entryRuleSubtree8081);
            iv_ruleSubtree=ruleSubtree();

            state._fsp--;

             current =iv_ruleSubtree; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleSubtree8091); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSubtree"


    // $ANTLR start "ruleSubtree"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3434:1: ruleSubtree returns [EObject current=null] : ( () ( (lv_symOcc_1_0= ruleSymOcc ) )? ) ;
    public final EObject ruleSubtree() throws RecognitionException {
        EObject current = null;

        EObject lv_symOcc_1_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3437:28: ( ( () ( (lv_symOcc_1_0= ruleSymOcc ) )? ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3438:1: ( () ( (lv_symOcc_1_0= ruleSymOcc ) )? )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3438:1: ( () ( (lv_symOcc_1_0= ruleSymOcc ) )? )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3438:2: () ( (lv_symOcc_1_0= ruleSymOcc ) )?
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3438:2: ()
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3439:5: 
            {

                    current = forceCreateModelElement(
                        grammarAccess.getSubtreeAccess().getSubtreeAction_0(),
                        current);
                

            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3444:2: ( (lv_symOcc_1_0= ruleSymOcc ) )?
            int alt45=2;
            int LA45_0 = input.LA(1);

            if ( (LA45_0==RULE_ID||(LA45_0>=19 && LA45_0<=20)||(LA45_0>=34 && LA45_0<=36)) ) {
                alt45=1;
            }
            switch (alt45) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3445:1: (lv_symOcc_1_0= ruleSymOcc )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3445:1: (lv_symOcc_1_0= ruleSymOcc )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3446:3: lv_symOcc_1_0= ruleSymOcc
                    {
                     
                    	        newCompositeNode(grammarAccess.getSubtreeAccess().getSymOccSymOccParserRuleCall_1_0()); 
                    	    
                    pushFollow(FOLLOW_ruleSymOcc_in_ruleSubtree8146);
                    lv_symOcc_1_0=ruleSymOcc();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getSubtreeRule());
                    	        }
                           		set(
                           			current, 
                           			"symOcc",
                            		lv_symOcc_1_0, 
                            		"SymOcc");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }
                    break;

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSubtree"


    // $ANTLR start "entryRuleShield"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3470:1: entryRuleShield returns [EObject current=null] : iv_ruleShield= ruleShield EOF ;
    public final EObject entryRuleShield() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleShield = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3471:2: (iv_ruleShield= ruleShield EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3472:2: iv_ruleShield= ruleShield EOF
            {
             newCompositeNode(grammarAccess.getShieldRule()); 
            pushFollow(FOLLOW_ruleShield_in_entryRuleShield8183);
            iv_ruleShield=ruleShield();

            state._fsp--;

             current =iv_ruleShield; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleShield8193); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleShield"


    // $ANTLR start "ruleShield"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3479:1: ruleShield returns [EObject current=null] : (otherlv_0= 'SHIELD' this_ShieldClause_1= ruleShieldClause ) ;
    public final EObject ruleShield() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        EObject this_ShieldClause_1 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3482:28: ( (otherlv_0= 'SHIELD' this_ShieldClause_1= ruleShieldClause ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3483:1: (otherlv_0= 'SHIELD' this_ShieldClause_1= ruleShieldClause )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3483:1: (otherlv_0= 'SHIELD' this_ShieldClause_1= ruleShieldClause )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3483:3: otherlv_0= 'SHIELD' this_ShieldClause_1= ruleShieldClause
            {
            otherlv_0=(Token)match(input,49,FOLLOW_49_in_ruleShield8230); 

                	newLeafNode(otherlv_0, grammarAccess.getShieldAccess().getSHIELDKeyword_0());
                
             
                    newCompositeNode(grammarAccess.getShieldAccess().getShieldClauseParserRuleCall_1()); 
                
            pushFollow(FOLLOW_ruleShieldClause_in_ruleShield8252);
            this_ShieldClause_1=ruleShieldClause();

            state._fsp--;

             
                    current = this_ShieldClause_1; 
                    afterParserOrEnumRuleCall();
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleShield"


    // $ANTLR start "entryRuleShieldClause"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3504:1: entryRuleShieldClause returns [EObject current=null] : iv_ruleShieldClause= ruleShieldClause EOF ;
    public final EObject entryRuleShieldClause() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleShieldClause = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3505:2: (iv_ruleShieldClause= ruleShieldClause EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3506:2: iv_ruleShieldClause= ruleShieldClause EOF
            {
             newCompositeNode(grammarAccess.getShieldClauseRule()); 
            pushFollow(FOLLOW_ruleShieldClause_in_entryRuleShieldClause8287);
            iv_ruleShieldClause=ruleShieldClause();

            state._fsp--;

             current =iv_ruleShieldClause; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleShieldClause8297); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleShieldClause"


    // $ANTLR start "ruleShieldClause"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3513:1: ruleShieldClause returns [EObject current=null] : ( () ( ( (lv_shieldSym_1_0= ruleShieldSym ) ) | (otherlv_2= '(' ( (lv_shieldSym_3_0= ruleShieldSyms ) ) otherlv_4= ')' ) | (otherlv_5= '(' otherlv_6= ')' ) ) ) ;
    public final EObject ruleShieldClause() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        EObject lv_shieldSym_1_0 = null;

        EObject lv_shieldSym_3_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3516:28: ( ( () ( ( (lv_shieldSym_1_0= ruleShieldSym ) ) | (otherlv_2= '(' ( (lv_shieldSym_3_0= ruleShieldSyms ) ) otherlv_4= ')' ) | (otherlv_5= '(' otherlv_6= ')' ) ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3517:1: ( () ( ( (lv_shieldSym_1_0= ruleShieldSym ) ) | (otherlv_2= '(' ( (lv_shieldSym_3_0= ruleShieldSyms ) ) otherlv_4= ')' ) | (otherlv_5= '(' otherlv_6= ')' ) ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3517:1: ( () ( ( (lv_shieldSym_1_0= ruleShieldSym ) ) | (otherlv_2= '(' ( (lv_shieldSym_3_0= ruleShieldSyms ) ) otherlv_4= ')' ) | (otherlv_5= '(' otherlv_6= ')' ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3517:2: () ( ( (lv_shieldSym_1_0= ruleShieldSym ) ) | (otherlv_2= '(' ( (lv_shieldSym_3_0= ruleShieldSyms ) ) otherlv_4= ')' ) | (otherlv_5= '(' otherlv_6= ')' ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3517:2: ()
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3518:5: 
            {

                    current = forceCreateModelElement(
                        grammarAccess.getShieldClauseAccess().getShieldClauseAction_0(),
                        current);
                

            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3523:2: ( ( (lv_shieldSym_1_0= ruleShieldSym ) ) | (otherlv_2= '(' ( (lv_shieldSym_3_0= ruleShieldSyms ) ) otherlv_4= ')' ) | (otherlv_5= '(' otherlv_6= ')' ) )
            int alt46=3;
            int LA46_0 = input.LA(1);

            if ( (LA46_0==RULE_ID) ) {
                alt46=1;
            }
            else if ( (LA46_0==39) ) {
                int LA46_2 = input.LA(2);

                if ( (LA46_2==RULE_ID) ) {
                    alt46=2;
                }
                else if ( (LA46_2==40) ) {
                    alt46=3;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 46, 2, input);

                    throw nvae;
                }
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 46, 0, input);

                throw nvae;
            }
            switch (alt46) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3523:3: ( (lv_shieldSym_1_0= ruleShieldSym ) )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3523:3: ( (lv_shieldSym_1_0= ruleShieldSym ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3524:1: (lv_shieldSym_1_0= ruleShieldSym )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3524:1: (lv_shieldSym_1_0= ruleShieldSym )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3525:3: lv_shieldSym_1_0= ruleShieldSym
                    {
                     
                    	        newCompositeNode(grammarAccess.getShieldClauseAccess().getShieldSymShieldSymParserRuleCall_1_0_0()); 
                    	    
                    pushFollow(FOLLOW_ruleShieldSym_in_ruleShieldClause8353);
                    lv_shieldSym_1_0=ruleShieldSym();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getShieldClauseRule());
                    	        }
                           		set(
                           			current, 
                           			"shieldSym",
                            		lv_shieldSym_1_0, 
                            		"ShieldSym");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }


                    }
                    break;
                case 2 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3542:6: (otherlv_2= '(' ( (lv_shieldSym_3_0= ruleShieldSyms ) ) otherlv_4= ')' )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3542:6: (otherlv_2= '(' ( (lv_shieldSym_3_0= ruleShieldSyms ) ) otherlv_4= ')' )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3542:8: otherlv_2= '(' ( (lv_shieldSym_3_0= ruleShieldSyms ) ) otherlv_4= ')'
                    {
                    otherlv_2=(Token)match(input,39,FOLLOW_39_in_ruleShieldClause8372); 

                        	newLeafNode(otherlv_2, grammarAccess.getShieldClauseAccess().getLeftParenthesisKeyword_1_1_0());
                        
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3546:1: ( (lv_shieldSym_3_0= ruleShieldSyms ) )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3547:1: (lv_shieldSym_3_0= ruleShieldSyms )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3547:1: (lv_shieldSym_3_0= ruleShieldSyms )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3548:3: lv_shieldSym_3_0= ruleShieldSyms
                    {
                     
                    	        newCompositeNode(grammarAccess.getShieldClauseAccess().getShieldSymShieldSymsParserRuleCall_1_1_1_0()); 
                    	    
                    pushFollow(FOLLOW_ruleShieldSyms_in_ruleShieldClause8393);
                    lv_shieldSym_3_0=ruleShieldSyms();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getShieldClauseRule());
                    	        }
                           		set(
                           			current, 
                           			"shieldSym",
                            		lv_shieldSym_3_0, 
                            		"ShieldSyms");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    otherlv_4=(Token)match(input,40,FOLLOW_40_in_ruleShieldClause8405); 

                        	newLeafNode(otherlv_4, grammarAccess.getShieldClauseAccess().getRightParenthesisKeyword_1_1_2());
                        

                    }


                    }
                    break;
                case 3 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3569:6: (otherlv_5= '(' otherlv_6= ')' )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3569:6: (otherlv_5= '(' otherlv_6= ')' )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3569:8: otherlv_5= '(' otherlv_6= ')'
                    {
                    otherlv_5=(Token)match(input,39,FOLLOW_39_in_ruleShieldClause8425); 

                        	newLeafNode(otherlv_5, grammarAccess.getShieldClauseAccess().getLeftParenthesisKeyword_1_2_0());
                        
                    otherlv_6=(Token)match(input,40,FOLLOW_40_in_ruleShieldClause8437); 

                        	newLeafNode(otherlv_6, grammarAccess.getShieldClauseAccess().getRightParenthesisKeyword_1_2_1());
                        

                    }


                    }
                    break;

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleShieldClause"


    // $ANTLR start "entryRuleShieldSyms"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3585:1: entryRuleShieldSyms returns [EObject current=null] : iv_ruleShieldSyms= ruleShieldSyms EOF ;
    public final EObject entryRuleShieldSyms() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleShieldSyms = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3586:2: (iv_ruleShieldSyms= ruleShieldSyms EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3587:2: iv_ruleShieldSyms= ruleShieldSyms EOF
            {
             newCompositeNode(grammarAccess.getShieldSymsRule()); 
            pushFollow(FOLLOW_ruleShieldSyms_in_entryRuleShieldSyms8475);
            iv_ruleShieldSyms=ruleShieldSyms();

            state._fsp--;

             current =iv_ruleShieldSyms; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleShieldSyms8485); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleShieldSyms"


    // $ANTLR start "ruleShieldSyms"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3594:1: ruleShieldSyms returns [EObject current=null] : ( ( (lv_shieldSyms_0_0= ruleShieldSym ) ) (otherlv_1= ',' ( (lv_shieldSyms_2_0= ruleShieldSym ) ) )* ) ;
    public final EObject ruleShieldSyms() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_shieldSyms_0_0 = null;

        EObject lv_shieldSyms_2_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3597:28: ( ( ( (lv_shieldSyms_0_0= ruleShieldSym ) ) (otherlv_1= ',' ( (lv_shieldSyms_2_0= ruleShieldSym ) ) )* ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3598:1: ( ( (lv_shieldSyms_0_0= ruleShieldSym ) ) (otherlv_1= ',' ( (lv_shieldSyms_2_0= ruleShieldSym ) ) )* )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3598:1: ( ( (lv_shieldSyms_0_0= ruleShieldSym ) ) (otherlv_1= ',' ( (lv_shieldSyms_2_0= ruleShieldSym ) ) )* )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3598:2: ( (lv_shieldSyms_0_0= ruleShieldSym ) ) (otherlv_1= ',' ( (lv_shieldSyms_2_0= ruleShieldSym ) ) )*
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3598:2: ( (lv_shieldSyms_0_0= ruleShieldSym ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3599:1: (lv_shieldSyms_0_0= ruleShieldSym )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3599:1: (lv_shieldSyms_0_0= ruleShieldSym )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3600:3: lv_shieldSyms_0_0= ruleShieldSym
            {
             
            	        newCompositeNode(grammarAccess.getShieldSymsAccess().getShieldSymsShieldSymParserRuleCall_0_0()); 
            	    
            pushFollow(FOLLOW_ruleShieldSym_in_ruleShieldSyms8531);
            lv_shieldSyms_0_0=ruleShieldSym();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getShieldSymsRule());
            	        }
                   		add(
                   			current, 
                   			"shieldSyms",
                    		lv_shieldSyms_0_0, 
                    		"ShieldSym");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3616:2: (otherlv_1= ',' ( (lv_shieldSyms_2_0= ruleShieldSym ) ) )*
            loop47:
            do {
                int alt47=2;
                int LA47_0 = input.LA(1);

                if ( (LA47_0==18) ) {
                    alt47=1;
                }


                switch (alt47) {
            	case 1 :
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3616:4: otherlv_1= ',' ( (lv_shieldSyms_2_0= ruleShieldSym ) )
            	    {
            	    otherlv_1=(Token)match(input,18,FOLLOW_18_in_ruleShieldSyms8544); 

            	        	newLeafNode(otherlv_1, grammarAccess.getShieldSymsAccess().getCommaKeyword_1_0());
            	        
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3620:1: ( (lv_shieldSyms_2_0= ruleShieldSym ) )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3621:1: (lv_shieldSyms_2_0= ruleShieldSym )
            	    {
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3621:1: (lv_shieldSyms_2_0= ruleShieldSym )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3622:3: lv_shieldSyms_2_0= ruleShieldSym
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getShieldSymsAccess().getShieldSymsShieldSymParserRuleCall_1_1_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleShieldSym_in_ruleShieldSyms8565);
            	    lv_shieldSyms_2_0=ruleShieldSym();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getShieldSymsRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"shieldSyms",
            	            		lv_shieldSyms_2_0, 
            	            		"ShieldSym");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop47;
                }
            } while (true);


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleShieldSyms"


    // $ANTLR start "entryRuleShieldSym"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3646:1: entryRuleShieldSym returns [EObject current=null] : iv_ruleShieldSym= ruleShieldSym EOF ;
    public final EObject entryRuleShieldSym() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleShieldSym = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3647:2: (iv_ruleShieldSym= ruleShieldSym EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3648:2: iv_ruleShieldSym= ruleShieldSym EOF
            {
             newCompositeNode(grammarAccess.getShieldSymRule()); 
            pushFollow(FOLLOW_ruleShieldSym_in_entryRuleShieldSym8603);
            iv_ruleShieldSym=ruleShieldSym();

            state._fsp--;

             current =iv_ruleShieldSym; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleShieldSym8613); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleShieldSym"


    // $ANTLR start "ruleShieldSym"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3655:1: ruleShieldSym returns [EObject current=null] : this_SymbolId_0= ruleSymbolId ;
    public final EObject ruleShieldSym() throws RecognitionException {
        EObject current = null;

        EObject this_SymbolId_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3658:28: (this_SymbolId_0= ruleSymbolId )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3660:5: this_SymbolId_0= ruleSymbolId
            {
             
                    newCompositeNode(grammarAccess.getShieldSymAccess().getSymbolIdParserRuleCall()); 
                
            pushFollow(FOLLOW_ruleSymbolId_in_ruleShieldSym8659);
            this_SymbolId_0=ruleSymbolId();

            state._fsp--;

             
                    current = this_SymbolId_0; 
                    afterParserOrEnumRuleCall();
                

            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleShieldSym"


    // $ANTLR start "entryRuleSymCompSpec"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3676:1: entryRuleSymCompSpec returns [EObject current=null] : iv_ruleSymCompSpec= ruleSymCompSpec EOF ;
    public final EObject entryRuleSymCompSpec() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSymCompSpec = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3677:2: (iv_ruleSymCompSpec= ruleSymCompSpec EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3678:2: iv_ruleSymCompSpec= ruleSymCompSpec EOF
            {
             newCompositeNode(grammarAccess.getSymCompSpecRule()); 
            pushFollow(FOLLOW_ruleSymCompSpec_in_entryRuleSymCompSpec8693);
            iv_ruleSymCompSpec=ruleSymCompSpec();

            state._fsp--;

             current =iv_ruleSymCompSpec; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleSymCompSpec8703); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSymCompSpec"


    // $ANTLR start "ruleSymCompSpec"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3685:1: ruleSymCompSpec returns [EObject current=null] : ( ruleSymClass this_SymbolDefId_1= ruleSymbolDefId ( (lv_inheritOpt_2_0= ruleInheritOpt ) )? ( (lv_compPart_3_0= ruleCompPart ) )? otherlv_4= 'END' ) ;
    public final EObject ruleSymCompSpec() throws RecognitionException {
        EObject current = null;

        Token otherlv_4=null;
        EObject this_SymbolDefId_1 = null;

        EObject lv_inheritOpt_2_0 = null;

        EObject lv_compPart_3_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3688:28: ( ( ruleSymClass this_SymbolDefId_1= ruleSymbolDefId ( (lv_inheritOpt_2_0= ruleInheritOpt ) )? ( (lv_compPart_3_0= ruleCompPart ) )? otherlv_4= 'END' ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3689:1: ( ruleSymClass this_SymbolDefId_1= ruleSymbolDefId ( (lv_inheritOpt_2_0= ruleInheritOpt ) )? ( (lv_compPart_3_0= ruleCompPart ) )? otherlv_4= 'END' )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3689:1: ( ruleSymClass this_SymbolDefId_1= ruleSymbolDefId ( (lv_inheritOpt_2_0= ruleInheritOpt ) )? ( (lv_compPart_3_0= ruleCompPart ) )? otherlv_4= 'END' )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3690:5: ruleSymClass this_SymbolDefId_1= ruleSymbolDefId ( (lv_inheritOpt_2_0= ruleInheritOpt ) )? ( (lv_compPart_3_0= ruleCompPart ) )? otherlv_4= 'END'
            {
             
                    newCompositeNode(grammarAccess.getSymCompSpecAccess().getSymClassParserRuleCall_0()); 
                
            pushFollow(FOLLOW_ruleSymClass_in_ruleSymCompSpec8744);
            ruleSymClass();

            state._fsp--;

             
                    afterParserOrEnumRuleCall();
                
             
                    newCompositeNode(grammarAccess.getSymCompSpecAccess().getSymbolDefIdParserRuleCall_1()); 
                
            pushFollow(FOLLOW_ruleSymbolDefId_in_ruleSymCompSpec8765);
            this_SymbolDefId_1=ruleSymbolDefId();

            state._fsp--;

             
                    current = this_SymbolDefId_1; 
                    afterParserOrEnumRuleCall();
                
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3706:1: ( (lv_inheritOpt_2_0= ruleInheritOpt ) )?
            int alt48=2;
            int LA48_0 = input.LA(1);

            if ( (LA48_0==50) ) {
                alt48=1;
            }
            switch (alt48) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3707:1: (lv_inheritOpt_2_0= ruleInheritOpt )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3707:1: (lv_inheritOpt_2_0= ruleInheritOpt )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3708:3: lv_inheritOpt_2_0= ruleInheritOpt
                    {
                     
                    	        newCompositeNode(grammarAccess.getSymCompSpecAccess().getInheritOptInheritOptParserRuleCall_2_0()); 
                    	    
                    pushFollow(FOLLOW_ruleInheritOpt_in_ruleSymCompSpec8785);
                    lv_inheritOpt_2_0=ruleInheritOpt();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getSymCompSpecRule());
                    	        }
                           		set(
                           			current, 
                           			"inheritOpt",
                            		lv_inheritOpt_2_0, 
                            		"InheritOpt");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }
                    break;

            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3724:3: ( (lv_compPart_3_0= ruleCompPart ) )?
            int alt49=2;
            int LA49_0 = input.LA(1);

            if ( (LA49_0==29) ) {
                alt49=1;
            }
            switch (alt49) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3725:1: (lv_compPart_3_0= ruleCompPart )
                    {
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3725:1: (lv_compPart_3_0= ruleCompPart )
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3726:3: lv_compPart_3_0= ruleCompPart
                    {
                     
                    	        newCompositeNode(grammarAccess.getSymCompSpecAccess().getCompPartCompPartParserRuleCall_3_0()); 
                    	    
                    pushFollow(FOLLOW_ruleCompPart_in_ruleSymCompSpec8807);
                    lv_compPart_3_0=ruleCompPart();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getSymCompSpecRule());
                    	        }
                           		set(
                           			current, 
                           			"compPart",
                            		lv_compPart_3_0, 
                            		"CompPart");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }
                    break;

            }

            otherlv_4=(Token)match(input,24,FOLLOW_24_in_ruleSymCompSpec8820); 

                	newLeafNode(otherlv_4, grammarAccess.getSymCompSpecAccess().getENDKeyword_4());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSymCompSpec"


    // $ANTLR start "entryRuleInheritOpt"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3754:1: entryRuleInheritOpt returns [EObject current=null] : iv_ruleInheritOpt= ruleInheritOpt EOF ;
    public final EObject entryRuleInheritOpt() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleInheritOpt = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3755:2: (iv_ruleInheritOpt= ruleInheritOpt EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3756:2: iv_ruleInheritOpt= ruleInheritOpt EOF
            {
             newCompositeNode(grammarAccess.getInheritOptRule()); 
            pushFollow(FOLLOW_ruleInheritOpt_in_entryRuleInheritOpt8856);
            iv_ruleInheritOpt=ruleInheritOpt();

            state._fsp--;

             current =iv_ruleInheritOpt; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleInheritOpt8866); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleInheritOpt"


    // $ANTLR start "ruleInheritOpt"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3763:1: ruleInheritOpt returns [EObject current=null] : (otherlv_0= 'INHERITS' this_InheritSyms_1= ruleInheritSyms ) ;
    public final EObject ruleInheritOpt() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        EObject this_InheritSyms_1 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3766:28: ( (otherlv_0= 'INHERITS' this_InheritSyms_1= ruleInheritSyms ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3767:1: (otherlv_0= 'INHERITS' this_InheritSyms_1= ruleInheritSyms )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3767:1: (otherlv_0= 'INHERITS' this_InheritSyms_1= ruleInheritSyms )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3767:3: otherlv_0= 'INHERITS' this_InheritSyms_1= ruleInheritSyms
            {
            otherlv_0=(Token)match(input,50,FOLLOW_50_in_ruleInheritOpt8903); 

                	newLeafNode(otherlv_0, grammarAccess.getInheritOptAccess().getINHERITSKeyword_0());
                
             
                    newCompositeNode(grammarAccess.getInheritOptAccess().getInheritSymsParserRuleCall_1()); 
                
            pushFollow(FOLLOW_ruleInheritSyms_in_ruleInheritOpt8925);
            this_InheritSyms_1=ruleInheritSyms();

            state._fsp--;

             
                    current = this_InheritSyms_1; 
                    afterParserOrEnumRuleCall();
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleInheritOpt"


    // $ANTLR start "entryRuleInheritSyms"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3788:1: entryRuleInheritSyms returns [EObject current=null] : iv_ruleInheritSyms= ruleInheritSyms EOF ;
    public final EObject entryRuleInheritSyms() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleInheritSyms = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3789:2: (iv_ruleInheritSyms= ruleInheritSyms EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3790:2: iv_ruleInheritSyms= ruleInheritSyms EOF
            {
             newCompositeNode(grammarAccess.getInheritSymsRule()); 
            pushFollow(FOLLOW_ruleInheritSyms_in_entryRuleInheritSyms8960);
            iv_ruleInheritSyms=ruleInheritSyms();

            state._fsp--;

             current =iv_ruleInheritSyms; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleInheritSyms8970); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleInheritSyms"


    // $ANTLR start "ruleInheritSyms"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3797:1: ruleInheritSyms returns [EObject current=null] : ( ( (lv_inheritSyms_0_0= ruleInheritSym ) ) (otherlv_1= ',' ( (lv_inheritSyms_2_0= ruleInheritSym ) ) )* ) ;
    public final EObject ruleInheritSyms() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_inheritSyms_0_0 = null;

        EObject lv_inheritSyms_2_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3800:28: ( ( ( (lv_inheritSyms_0_0= ruleInheritSym ) ) (otherlv_1= ',' ( (lv_inheritSyms_2_0= ruleInheritSym ) ) )* ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3801:1: ( ( (lv_inheritSyms_0_0= ruleInheritSym ) ) (otherlv_1= ',' ( (lv_inheritSyms_2_0= ruleInheritSym ) ) )* )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3801:1: ( ( (lv_inheritSyms_0_0= ruleInheritSym ) ) (otherlv_1= ',' ( (lv_inheritSyms_2_0= ruleInheritSym ) ) )* )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3801:2: ( (lv_inheritSyms_0_0= ruleInheritSym ) ) (otherlv_1= ',' ( (lv_inheritSyms_2_0= ruleInheritSym ) ) )*
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3801:2: ( (lv_inheritSyms_0_0= ruleInheritSym ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3802:1: (lv_inheritSyms_0_0= ruleInheritSym )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3802:1: (lv_inheritSyms_0_0= ruleInheritSym )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3803:3: lv_inheritSyms_0_0= ruleInheritSym
            {
             
            	        newCompositeNode(grammarAccess.getInheritSymsAccess().getInheritSymsInheritSymParserRuleCall_0_0()); 
            	    
            pushFollow(FOLLOW_ruleInheritSym_in_ruleInheritSyms9016);
            lv_inheritSyms_0_0=ruleInheritSym();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getInheritSymsRule());
            	        }
                   		add(
                   			current, 
                   			"inheritSyms",
                    		lv_inheritSyms_0_0, 
                    		"InheritSym");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3819:2: (otherlv_1= ',' ( (lv_inheritSyms_2_0= ruleInheritSym ) ) )*
            loop50:
            do {
                int alt50=2;
                int LA50_0 = input.LA(1);

                if ( (LA50_0==18) ) {
                    alt50=1;
                }


                switch (alt50) {
            	case 1 :
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3819:4: otherlv_1= ',' ( (lv_inheritSyms_2_0= ruleInheritSym ) )
            	    {
            	    otherlv_1=(Token)match(input,18,FOLLOW_18_in_ruleInheritSyms9029); 

            	        	newLeafNode(otherlv_1, grammarAccess.getInheritSymsAccess().getCommaKeyword_1_0());
            	        
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3823:1: ( (lv_inheritSyms_2_0= ruleInheritSym ) )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3824:1: (lv_inheritSyms_2_0= ruleInheritSym )
            	    {
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3824:1: (lv_inheritSyms_2_0= ruleInheritSym )
            	    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3825:3: lv_inheritSyms_2_0= ruleInheritSym
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getInheritSymsAccess().getInheritSymsInheritSymParserRuleCall_1_1_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleInheritSym_in_ruleInheritSyms9050);
            	    lv_inheritSyms_2_0=ruleInheritSym();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getInheritSymsRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"inheritSyms",
            	            		lv_inheritSyms_2_0, 
            	            		"InheritSym");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop50;
                }
            } while (true);


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleInheritSyms"


    // $ANTLR start "entryRuleInheritSym"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3849:1: entryRuleInheritSym returns [EObject current=null] : iv_ruleInheritSym= ruleInheritSym EOF ;
    public final EObject entryRuleInheritSym() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleInheritSym = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3850:2: (iv_ruleInheritSym= ruleInheritSym EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3851:2: iv_ruleInheritSym= ruleInheritSym EOF
            {
             newCompositeNode(grammarAccess.getInheritSymRule()); 
            pushFollow(FOLLOW_ruleInheritSym_in_entryRuleInheritSym9088);
            iv_ruleInheritSym=ruleInheritSym();

            state._fsp--;

             current =iv_ruleInheritSym; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleInheritSym9098); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleInheritSym"


    // $ANTLR start "ruleInheritSym"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3858:1: ruleInheritSym returns [EObject current=null] : this_SymbolId_0= ruleSymbolId ;
    public final EObject ruleInheritSym() throws RecognitionException {
        EObject current = null;

        EObject this_SymbolId_0 = null;


         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3861:28: (this_SymbolId_0= ruleSymbolId )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3863:5: this_SymbolId_0= ruleSymbolId
            {
             
                    newCompositeNode(grammarAccess.getInheritSymAccess().getSymbolIdParserRuleCall()); 
                
            pushFollow(FOLLOW_ruleSymbolId_in_ruleInheritSym9144);
            this_SymbolId_0=ruleSymbolId();

            state._fsp--;

             
                    current = this_SymbolId_0; 
                    afterParserOrEnumRuleCall();
                

            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleInheritSym"


    // $ANTLR start "entryRuleC_INTEGER"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3879:1: entryRuleC_INTEGER returns [String current=null] : iv_ruleC_INTEGER= ruleC_INTEGER EOF ;
    public final String entryRuleC_INTEGER() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleC_INTEGER = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3880:2: (iv_ruleC_INTEGER= ruleC_INTEGER EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3881:2: iv_ruleC_INTEGER= ruleC_INTEGER EOF
            {
             newCompositeNode(grammarAccess.getC_INTEGERRule()); 
            pushFollow(FOLLOW_ruleC_INTEGER_in_entryRuleC_INTEGER9179);
            iv_ruleC_INTEGER=ruleC_INTEGER();

            state._fsp--;

             current =iv_ruleC_INTEGER.getText(); 
            match(input,EOF,FOLLOW_EOF_in_entryRuleC_INTEGER9190); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleC_INTEGER"


    // $ANTLR start "ruleC_INTEGER"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3888:1: ruleC_INTEGER returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_INT_0= RULE_INT ;
    public final AntlrDatatypeRuleToken ruleC_INTEGER() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_INT_0=null;

         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3891:28: (this_INT_0= RULE_INT )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3892:5: this_INT_0= RULE_INT
            {
            this_INT_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleC_INTEGER9229); 

            		current.merge(this_INT_0);
                
             
                newLeafNode(this_INT_0, grammarAccess.getC_INTEGERAccess().getINTTerminalRuleCall()); 
                

            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleC_INTEGER"


    // $ANTLR start "entryRuleC_FLOAT"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3907:1: entryRuleC_FLOAT returns [String current=null] : iv_ruleC_FLOAT= ruleC_FLOAT EOF ;
    public final String entryRuleC_FLOAT() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleC_FLOAT = null;


        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3908:2: (iv_ruleC_FLOAT= ruleC_FLOAT EOF )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3909:2: iv_ruleC_FLOAT= ruleC_FLOAT EOF
            {
             newCompositeNode(grammarAccess.getC_FLOATRule()); 
            pushFollow(FOLLOW_ruleC_FLOAT_in_entryRuleC_FLOAT9274);
            iv_ruleC_FLOAT=ruleC_FLOAT();

            state._fsp--;

             current =iv_ruleC_FLOAT.getText(); 
            match(input,EOF,FOLLOW_EOF_in_entryRuleC_FLOAT9285); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleC_FLOAT"


    // $ANTLR start "ruleC_FLOAT"
    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3916:1: ruleC_FLOAT returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_INT_0= RULE_INT kw= '.' (this_EXT_INT_2= RULE_EXT_INT | this_INT_3= RULE_INT ) ) ;
    public final AntlrDatatypeRuleToken ruleC_FLOAT() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_INT_0=null;
        Token kw=null;
        Token this_EXT_INT_2=null;
        Token this_INT_3=null;

         enterRule(); 
            
        try {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3919:28: ( (this_INT_0= RULE_INT kw= '.' (this_EXT_INT_2= RULE_EXT_INT | this_INT_3= RULE_INT ) ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3920:1: (this_INT_0= RULE_INT kw= '.' (this_EXT_INT_2= RULE_EXT_INT | this_INT_3= RULE_INT ) )
            {
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3920:1: (this_INT_0= RULE_INT kw= '.' (this_EXT_INT_2= RULE_EXT_INT | this_INT_3= RULE_INT ) )
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3920:6: this_INT_0= RULE_INT kw= '.' (this_EXT_INT_2= RULE_EXT_INT | this_INT_3= RULE_INT )
            {
            this_INT_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleC_FLOAT9325); 

            		current.merge(this_INT_0);
                
             
                newLeafNode(this_INT_0, grammarAccess.getC_FLOATAccess().getINTTerminalRuleCall_0()); 
                
            kw=(Token)match(input,33,FOLLOW_33_in_ruleC_FLOAT9343); 

                    current.merge(kw);
                    newLeafNode(kw, grammarAccess.getC_FLOATAccess().getFullStopKeyword_1()); 
                
            // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3933:1: (this_EXT_INT_2= RULE_EXT_INT | this_INT_3= RULE_INT )
            int alt51=2;
            int LA51_0 = input.LA(1);

            if ( (LA51_0==RULE_EXT_INT) ) {
                alt51=1;
            }
            else if ( (LA51_0==RULE_INT) ) {
                alt51=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 51, 0, input);

                throw nvae;
            }
            switch (alt51) {
                case 1 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3933:6: this_EXT_INT_2= RULE_EXT_INT
                    {
                    this_EXT_INT_2=(Token)match(input,RULE_EXT_INT,FOLLOW_RULE_EXT_INT_in_ruleC_FLOAT9359); 

                    		current.merge(this_EXT_INT_2);
                        
                     
                        newLeafNode(this_EXT_INT_2, grammarAccess.getC_FLOATAccess().getEXT_INTTerminalRuleCall_2_0()); 
                        

                    }
                    break;
                case 2 :
                    // ../de.sabram.upb.specs.lido/src-gen/de/sabram/upb/specs/parser/antlr/internal/InternalLido.g:3941:10: this_INT_3= RULE_INT
                    {
                    this_INT_3=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleC_FLOAT9385); 

                    		current.merge(this_INT_3);
                        
                     
                        newLeafNode(this_INT_3, grammarAccess.getC_FLOATAccess().getINTTerminalRuleCall_2_1()); 
                        

                    }
                    break;

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleC_FLOAT"

    // Delegated rules


    protected DFA2 dfa2 = new DFA2(this);
    protected DFA23 dfa23 = new DFA23(this);
    protected DFA25 dfa25 = new DFA25(this);
    protected DFA30 dfa30 = new DFA30(this);
    protected DFA37 dfa37 = new DFA37(this);
    static final String DFA2_eotS =
        "\13\uffff";
    static final String DFA2_eofS =
        "\13\uffff";
    static final String DFA2_minS =
        "\1\15\1\uffff\2\21\1\4\3\uffff\1\16\2\uffff";
    static final String DFA2_maxS =
        "\1\27\1\uffff\2\21\1\4\3\uffff\1\62\2\uffff";
    static final String DFA2_acceptS =
        "\1\uffff\1\1\3\uffff\1\3\1\4\1\5\1\uffff\1\6\1\2";
    static final String DFA2_specialS =
        "\13\uffff}>";
    static final String[] DFA2_transitionS = {
            "\1\1\1\uffff\1\2\1\3\1\4\3\uffff\1\5\1\6\1\7",
            "",
            "\1\4",
            "\1\4",
            "\1\10",
            "",
            "",
            "",
            "\1\12\3\uffff\1\12\5\uffff\1\11\4\uffff\1\11\24\uffff\1\11",
            "",
            ""
    };

    static final short[] DFA2_eot = DFA.unpackEncodedString(DFA2_eotS);
    static final short[] DFA2_eof = DFA.unpackEncodedString(DFA2_eofS);
    static final char[] DFA2_min = DFA.unpackEncodedStringToUnsignedChars(DFA2_minS);
    static final char[] DFA2_max = DFA.unpackEncodedStringToUnsignedChars(DFA2_maxS);
    static final short[] DFA2_accept = DFA.unpackEncodedString(DFA2_acceptS);
    static final short[] DFA2_special = DFA.unpackEncodedString(DFA2_specialS);
    static final short[][] DFA2_transition;

    static {
        int numStates = DFA2_transitionS.length;
        DFA2_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA2_transition[i] = DFA.unpackEncodedString(DFA2_transitionS[i]);
        }
    }

    class DFA2 extends DFA {

        public DFA2(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 2;
            this.eot = DFA2_eot;
            this.eof = DFA2_eof;
            this.min = DFA2_min;
            this.max = DFA2_max;
            this.accept = DFA2_accept;
            this.special = DFA2_special;
            this.transition = DFA2_transition;
        }
        public String getDescription() {
            return "153:1: (this_TermSpec_0= ruleTermSpec | this_SymAttrSpec_1= ruleSymAttrSpec | this_AttrSpec_2= ruleAttrSpec | this_ChainSpec_3= ruleChainSpec | this_RuleSpec_4= ruleRuleSpec | this_SymCompSpec_5= ruleSymCompSpec )";
        }
    }
    static final String DFA23_eotS =
        "\20\uffff";
    static final String DFA23_eofS =
        "\1\uffff\1\11\12\uffff\1\11\1\uffff\2\11";
    static final String DFA23_minS =
        "\1\4\1\14\5\41\1\4\2\uffff\1\6\1\4\1\14\1\46\2\14";
    static final String DFA23_maxS =
        "\7\57\1\4\2\uffff\1\6\1\4\1\53\1\46\1\53\1\57";
    static final String DFA23_acceptS =
        "\10\uffff\1\1\1\2\6\uffff";
    static final String DFA23_specialS =
        "\20\uffff}>";
    static final String[] DFA23_transitionS = {
            "\1\1\2\11\6\uffff\1\11\5\uffff\1\2\1\3\13\uffff\1\10\1\7\1\4"+
            "\1\5\1\6\4\uffff\1\11\2\uffff\1\11\1\uffff\2\11",
            "\1\11\21\uffff\1\11\2\uffff\1\13\3\uffff\1\12\1\uffff\1\11"+
            "\2\uffff\2\11\3\uffff\1\11",
            "\1\13\15\uffff\1\11",
            "\1\13\15\uffff\1\11",
            "\1\13\15\uffff\1\11",
            "\1\13\15\uffff\1\11",
            "\1\13\15\uffff\1\11",
            "\1\14",
            "",
            "",
            "\1\15",
            "\1\16",
            "\1\11\21\uffff\1\11\1\10\12\uffff\2\11",
            "\1\17",
            "\1\11\21\uffff\1\11\1\10\12\uffff\2\11",
            "\1\11\21\uffff\1\11\2\uffff\1\13\10\uffff\2\11\3\uffff\1\11"
    };

    static final short[] DFA23_eot = DFA.unpackEncodedString(DFA23_eotS);
    static final short[] DFA23_eof = DFA.unpackEncodedString(DFA23_eofS);
    static final char[] DFA23_min = DFA.unpackEncodedStringToUnsignedChars(DFA23_minS);
    static final char[] DFA23_max = DFA.unpackEncodedStringToUnsignedChars(DFA23_maxS);
    static final short[] DFA23_accept = DFA.unpackEncodedString(DFA23_acceptS);
    static final short[] DFA23_special = DFA.unpackEncodedString(DFA23_specialS);
    static final short[][] DFA23_transition;

    static {
        int numStates = DFA23_transitionS.length;
        DFA23_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA23_transition[i] = DFA.unpackEncodedString(DFA23_transitionS[i]);
        }
    }

    class DFA23 extends DFA {

        public DFA23(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 23;
            this.eot = DFA23_eot;
            this.eof = DFA23_eof;
            this.min = DFA23_min;
            this.max = DFA23_max;
            this.accept = DFA23_accept;
            this.special = DFA23_special;
            this.transition = DFA23_transition;
        }
        public String getDescription() {
            return "1834:1: (this_AttrComp_0= ruleAttrComp | this_PlainComp_1= rulePlainComp )";
        }
    }
    static final String DFA25_eotS =
        "\22\uffff";
    static final String DFA25_eofS =
        "\22\uffff";
    static final String DFA25_minS =
        "\1\4\6\41\1\4\1\uffff\1\6\1\4\1\37\1\46\1\37\1\4\1\41\2\uffff";
    static final String DFA25_maxS =
        "\1\44\1\45\5\41\1\4\1\uffff\1\6\1\4\1\37\1\46\1\37\1\57\1\41\2\uffff";
    static final String DFA25_acceptS =
        "\10\uffff\1\3\7\uffff\1\1\1\2";
    static final String DFA25_specialS =
        "\22\uffff}>";
    static final String[] DFA25_transitionS = {
            "\1\1\16\uffff\1\2\1\3\13\uffff\1\10\1\7\1\4\1\5\1\6",
            "\1\12\3\uffff\1\11",
            "\1\12",
            "\1\12",
            "\1\12",
            "\1\12",
            "\1\12",
            "\1\13",
            "",
            "\1\14",
            "\1\15",
            "\1\16",
            "\1\17",
            "\1\16",
            "\3\20\6\uffff\1\20\5\uffff\2\20\14\uffff\4\20\4\uffff\1\20"+
            "\2\uffff\1\21\1\uffff\2\20",
            "\1\12",
            "",
            ""
    };

    static final short[] DFA25_eot = DFA.unpackEncodedString(DFA25_eotS);
    static final short[] DFA25_eof = DFA.unpackEncodedString(DFA25_eofS);
    static final char[] DFA25_min = DFA.unpackEncodedStringToUnsignedChars(DFA25_minS);
    static final char[] DFA25_max = DFA.unpackEncodedStringToUnsignedChars(DFA25_maxS);
    static final short[] DFA25_accept = DFA.unpackEncodedString(DFA25_acceptS);
    static final short[] DFA25_special = DFA.unpackEncodedString(DFA25_specialS);
    static final short[][] DFA25_transition;

    static {
        int numStates = DFA25_transitionS.length;
        DFA25_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA25_transition[i] = DFA.unpackEncodedString(DFA25_transitionS[i]);
        }
    }

    class DFA25 extends DFA {

        public DFA25(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 25;
            this.eot = DFA25_eot;
            this.eof = DFA25_eof;
            this.min = DFA25_min;
            this.max = DFA25_max;
            this.accept = DFA25_accept;
            this.special = DFA25_special;
            this.transition = DFA25_transition;
        }
        public String getDescription() {
            return "1914:1: ( (this_DefAttr_0= ruleDefAttr otherlv_1= '=' ( (lv_expressionDep_2_0= ruleExpressionDep ) ) ) | (this_DefAttr_3= ruleDefAttr otherlv_4= '=' ( (lv_loop_5_0= ruleLoop ) ) ) | (otherlv_6= 'CHAINSTART' this_DefAttr_7= ruleDefAttr otherlv_8= '=' ( (lv_chainexpressionDep_9_0= ruleExpressionDep ) ) ) )";
        }
    }
    static final String DFA30_eotS =
        "\23\uffff";
    static final String DFA30_eofS =
        "\1\uffff\1\12\12\uffff\1\17\5\uffff\1\12";
    static final String DFA30_minS =
        "\1\4\1\14\5\41\5\uffff\1\14\1\6\3\uffff\1\46\1\14";
    static final String DFA30_maxS =
        "\7\57\5\uffff\1\55\1\6\3\uffff\1\46\1\57";
    static final String DFA30_acceptS =
        "\7\uffff\1\1\1\2\1\4\1\5\1\6\2\uffff\1\3\1\10\1\7\2\uffff";
    static final String DFA30_specialS =
        "\23\uffff}>";
    static final String[] DFA30_transitionS = {
            "\1\1\1\13\1\14\6\uffff\1\12\5\uffff\1\2\1\3\14\uffff\1\7\1\4"+
            "\1\5\1\6\4\uffff\1\10\4\uffff\2\11",
            "\1\12\5\uffff\1\12\13\uffff\1\12\2\uffff\1\7\3\uffff\1\15\1"+
            "\uffff\1\16\1\12\1\uffff\2\12\1\uffff\1\12\1\uffff\1\11",
            "\1\7\15\uffff\1\11",
            "\1\7\15\uffff\1\11",
            "\1\7\15\uffff\1\11",
            "\1\7\15\uffff\1\11",
            "\1\7\15\uffff\1\11",
            "",
            "",
            "",
            "",
            "",
            "\1\17\5\uffff\1\17\13\uffff\1\17\2\uffff\1\20\6\uffff\1\17"+
            "\1\uffff\2\17\1\uffff\1\17",
            "\1\21",
            "",
            "",
            "",
            "\1\22",
            "\1\12\5\uffff\1\12\13\uffff\1\12\2\uffff\1\7\6\uffff\1\12\1"+
            "\uffff\2\12\1\uffff\1\12\1\uffff\1\11"
    };

    static final short[] DFA30_eot = DFA.unpackEncodedString(DFA30_eotS);
    static final short[] DFA30_eof = DFA.unpackEncodedString(DFA30_eofS);
    static final char[] DFA30_min = DFA.unpackEncodedStringToUnsignedChars(DFA30_minS);
    static final char[] DFA30_max = DFA.unpackEncodedStringToUnsignedChars(DFA30_maxS);
    static final short[] DFA30_accept = DFA.unpackEncodedString(DFA30_acceptS);
    static final short[] DFA30_special = DFA.unpackEncodedString(DFA30_specialS);
    static final short[][] DFA30_transition;

    static {
        int numStates = DFA30_transitionS.length;
        DFA30_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA30_transition[i] = DFA.unpackEncodedString(DFA30_transitionS[i]);
        }
    }

    class DFA30 extends DFA {

        public DFA30(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 30;
            this.eot = DFA30_eot;
            this.eof = DFA30_eof;
            this.min = DFA30_min;
            this.max = DFA30_max;
            this.accept = DFA30_accept;
            this.special = DFA30_special;
            this.transition = DFA30_transition;
        }
        public String getDescription() {
            return "2402:2: ( ( (lv_attr_1_0= ruleAttr ) ) | ( (lv_rhsAttrs_2_0= ruleRhsAttrs ) ) | ( ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '(' ( (lv_params_5_0= ruleParamsOpt ) ) otherlv_6= ')' ) | ( (lv_remoteExpression_7_0= ruleRemoteExpression ) ) | ( (lv_symbolRef_8_0= ruleSymbolRef ) ) | this_STRING_9= RULE_STRING | ruleC_FLOAT | ruleC_INTEGER )";
        }
    }
    static final String DFA37_eotS =
        "\15\uffff";
    static final String DFA37_eofS =
        "\15\uffff";
    static final String DFA37_minS =
        "\1\4\1\uffff\6\41\2\uffff\1\6\1\46\1\41";
    static final String DFA37_maxS =
        "\1\57\1\uffff\6\57\2\uffff\1\6\1\46\1\57";
    static final String DFA37_acceptS =
        "\1\uffff\1\1\6\uffff\1\2\1\3\3\uffff";
    static final String DFA37_specialS =
        "\15\uffff}>";
    static final String[] DFA37_transitionS = {
            "\1\2\16\uffff\1\3\1\4\14\uffff\1\10\1\5\1\6\1\7\4\uffff\1\11"+
            "\4\uffff\2\1",
            "",
            "\1\10\3\uffff\1\12\11\uffff\1\1",
            "\1\10\15\uffff\1\1",
            "\1\10\15\uffff\1\1",
            "\1\10\15\uffff\1\1",
            "\1\10\15\uffff\1\1",
            "\1\10\15\uffff\1\1",
            "",
            "",
            "\1\13",
            "\1\14",
            "\1\10\15\uffff\1\1"
    };

    static final short[] DFA37_eot = DFA.unpackEncodedString(DFA37_eotS);
    static final short[] DFA37_eof = DFA.unpackEncodedString(DFA37_eofS);
    static final char[] DFA37_min = DFA.unpackEncodedStringToUnsignedChars(DFA37_minS);
    static final char[] DFA37_max = DFA.unpackEncodedStringToUnsignedChars(DFA37_maxS);
    static final short[] DFA37_accept = DFA.unpackEncodedString(DFA37_acceptS);
    static final short[] DFA37_special = DFA.unpackEncodedString(DFA37_specialS);
    static final short[][] DFA37_transition;

    static {
        int numStates = DFA37_transitionS.length;
        DFA37_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA37_transition[i] = DFA.unpackEncodedString(DFA37_transitionS[i]);
        }
    }

    class DFA37 extends DFA {

        public DFA37(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 37;
            this.eot = DFA37_eot;
            this.eof = DFA37_eof;
            this.min = DFA37_min;
            this.max = DFA37_max;
            this.accept = DFA37_accept;
            this.special = DFA37_special;
            this.transition = DFA37_transition;
        }
        public String getDescription() {
            return "2836:1: (this_RemoteExpression_0= ruleRemoteExpression | this_Attr_1= ruleAttr | this_RhsAttrs_2= ruleRhsAttrs )";
        }
    }
 

    public static final BitSet FOLLOW_ruleAttributeGrammar_in_entryRuleAttributeGrammar75 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAttributeGrammar85 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSpecifications_in_ruleAttributeGrammar130 = new BitSet(new long[]{0x0000000000E3A002L});
    public static final BitSet FOLLOW_ruleSpecifications_in_entryRuleSpecifications166 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSpecifications176 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSpecification_in_ruleSpecifications223 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleSpecifications234 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSpecification_in_entryRuleSpecification270 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSpecification280 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTermSpec_in_ruleSpecification327 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSymAttrSpec_in_ruleSpecification354 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAttrSpec_in_ruleSpecification381 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleChainSpec_in_ruleSpecification408 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRuleSpec_in_ruleSpecification435 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSymCompSpec_in_ruleSpecification462 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTermSpec_in_entryRuleTermSpec497 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleTermSpec507 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_13_in_ruleTermSpec544 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleSymbolDefIds_in_ruleTermSpec566 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_14_in_ruleTermSpec577 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleTypeId_in_ruleTermSpec598 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSymAttrSpec_in_entryRuleSymAttrSpec634 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSymAttrSpec644 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSymClass_in_ruleSymAttrSpec685 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleSymbolDefIds_in_ruleSymAttrSpec706 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_14_in_ruleSymAttrSpec717 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleAttrDefsOpt_in_ruleSymAttrSpec738 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSymClass_in_entryRuleSymClass775 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSymClass786 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_15_in_ruleSymClass825 = new BitSet(new long[]{0x0000000000020000L});
    public static final BitSet FOLLOW_16_in_ruleSymClass844 = new BitSet(new long[]{0x0000000000020000L});
    public static final BitSet FOLLOW_17_in_ruleSymClass859 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSymbolDefIds_in_entryRuleSymbolDefIds899 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSymbolDefIds909 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSymbolDefId_in_ruleSymbolDefIds955 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_18_in_ruleSymbolDefIds968 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleSymbolDefId_in_ruleSymbolDefIds989 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_ruleSymbolDefId_in_entryRuleSymbolDefId1027 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSymbolDefId1037 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleSymbolDefId1078 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAttrDefsOpt_in_entryRuleAttrDefsOpt1118 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAttrDefsOpt1128 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAttrDefs_in_ruleAttrDefsOpt1183 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAttrDefs_in_entryRuleAttrDefs1220 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAttrDefs1230 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAttrDef_in_ruleAttrDefs1276 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_18_in_ruleAttrDefs1289 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleAttrDef_in_ruleAttrDefs1310 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_ruleAttrDef_in_entryRuleAttrDef1348 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAttrDef1358 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAttrDefIds_in_ruleAttrDef1405 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_14_in_ruleAttrDef1416 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleTypeId_in_ruleAttrDef1437 = new BitSet(new long[]{0x0000000000180002L});
    public static final BitSet FOLLOW_ruleClass_in_ruleAttrDef1454 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAttrDefIds_in_entryRuleAttrDefIds1491 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAttrDefIds1501 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAttrDefId_in_ruleAttrDefIds1547 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_18_in_ruleAttrDefIds1560 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleAttrDefId_in_ruleAttrDefIds1581 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_ruleAttrDefId_in_entryRuleAttrDefId1619 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAttrDefId1629 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleAttrDefId1670 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTypeId_in_entryRuleTypeId1710 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleTypeId1720 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleTypeId1761 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleClass_in_entryRuleClass1802 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleClass1813 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_19_in_ruleClass1851 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_20_in_ruleClass1870 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAttrSpec_in_entryRuleAttrSpec1910 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAttrSpec1920 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_21_in_ruleAttrSpec1957 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleAttrNames_in_ruleAttrSpec1979 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_14_in_ruleAttrSpec1990 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleTypeId_in_ruleAttrSpec2011 = new BitSet(new long[]{0x0000000000180002L});
    public static final BitSet FOLLOW_ruleClass_in_ruleAttrSpec2028 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAttrNames_in_entryRuleAttrNames2065 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAttrNames2075 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAttrName_in_ruleAttrNames2121 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_18_in_ruleAttrNames2134 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleAttrName_in_ruleAttrNames2155 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_ruleAttrName_in_entryRuleAttrName2193 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAttrName2203 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleAttrName2244 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleChainSpec_in_entryRuleChainSpec2284 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleChainSpec2294 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_22_in_ruleChainSpec2331 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleChainNames_in_ruleChainSpec2353 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_14_in_ruleChainSpec2364 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleTypeId_in_ruleChainSpec2385 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleChainNames_in_entryRuleChainNames2421 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleChainNames2431 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleChainName_in_ruleChainNames2477 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_18_in_ruleChainNames2490 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleChainName_in_ruleChainNames2511 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_ruleChainName_in_entryRuleChainName2549 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleChainName2559 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleChainName2600 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRuleSpec_in_entryRuleRuleSpec2640 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleRuleSpec2650 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_23_in_ruleRuleSpec2687 = new BitSet(new long[]{0x0000000000004010L});
    public static final BitSet FOLLOW_ruleRuleSpecId_in_ruleRuleSpec2708 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_14_in_ruleRuleSpec2720 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleProduction_in_ruleRuleSpec2741 = new BitSet(new long[]{0x0000000021000000L});
    public static final BitSet FOLLOW_ruleCompPart_in_ruleRuleSpec2762 = new BitSet(new long[]{0x0000000001000000L});
    public static final BitSet FOLLOW_24_in_ruleRuleSpec2775 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRuleSpecId_in_entryRuleRuleSpecId2811 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleRuleSpecId2821 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRuleId_in_ruleRuleSpecId2876 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRuleId_in_entryRuleRuleId2913 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleRuleId2923 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleRuleId2964 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleProduction_in_entryRuleProduction3004 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleProduction3014 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSyntId_in_ruleProduction3062 = new BitSet(new long[]{0x0000000002000000L});
    public static final BitSet FOLLOW_25_in_ruleProduction3073 = new BitSet(new long[]{0x0000000010000030L});
    public static final BitSet FOLLOW_ruleSyntUnits_in_ruleProduction3094 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSyntId_in_ruleProduction3124 = new BitSet(new long[]{0x0000000004000000L});
    public static final BitSet FOLLOW_26_in_ruleProduction3135 = new BitSet(new long[]{0x0000000008000010L});
    public static final BitSet FOLLOW_ruleAlts_in_ruleProduction3156 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAlts_in_entryRuleAlts3193 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAlts3203 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAlt_in_ruleAlts3249 = new BitSet(new long[]{0x0000000008000002L});
    public static final BitSet FOLLOW_27_in_ruleAlts3262 = new BitSet(new long[]{0x0000000008000010L});
    public static final BitSet FOLLOW_ruleAlt_in_ruleAlts3283 = new BitSet(new long[]{0x0000000008000002L});
    public static final BitSet FOLLOW_ruleAlt_in_entryRuleAlt3321 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAlt3331 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSyntId_in_ruleAlt3386 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSyntUnits_in_entryRuleSyntUnits3423 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSyntUnits3433 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSyntUnit_in_ruleSyntUnits3488 = new BitSet(new long[]{0x0000000010000032L});
    public static final BitSet FOLLOW_ruleSyntUnit_in_entryRuleSyntUnit3525 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSyntUnit3535 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSyntId_in_ruleSyntUnit3582 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_28_in_ruleSyntUnit3600 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleSyntId_in_ruleSyntUnit3622 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSyntLit_in_ruleSyntUnit3650 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSyntLit_in_entryRuleSyntLit3685 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSyntLit3695 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleSyntLit3736 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSyntId_in_entryRuleSyntId3776 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSyntId3786 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleSyntId3827 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleCompPart_in_entryRuleCompPart3867 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleCompPart3877 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_29_in_ruleCompPart3923 = new BitSet(new long[]{0x0000D21F00182072L});
    public static final BitSet FOLLOW_ruleComputations_in_ruleCompPart3944 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleComputations_in_entryRuleComputations3981 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleComputations3991 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleComputation_in_ruleComputations4037 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleComputations4050 = new BitSet(new long[]{0x0000D21F00182070L});
    public static final BitSet FOLLOW_ruleComputation_in_ruleComputations4071 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleComputations4085 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleComputation_in_entryRuleComputation4121 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleComputation4131 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleCompute_in_ruleComputation4178 = new BitSet(new long[]{0x0000000040000002L});
    public static final BitSet FOLLOW_30_in_ruleComputation4190 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleCompute_in_entryRuleCompute4228 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleCompute4238 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAttrComp_in_ruleCompute4285 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePlainComp_in_ruleCompute4312 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePlainComp_in_entryRulePlainComp4347 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRulePlainComp4357 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleLoop_in_rulePlainComp4404 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleExpressionDep_in_rulePlainComp4431 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAttrComp_in_entryRuleAttrComp4466 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAttrComp4476 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDefAttr_in_ruleAttrComp4524 = new BitSet(new long[]{0x0000000080000000L});
    public static final BitSet FOLLOW_31_in_ruleAttrComp4535 = new BitSet(new long[]{0x0000D21F00182070L});
    public static final BitSet FOLLOW_ruleExpressionDep_in_ruleAttrComp4556 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDefAttr_in_ruleAttrComp4586 = new BitSet(new long[]{0x0000000080000000L});
    public static final BitSet FOLLOW_31_in_ruleAttrComp4597 = new BitSet(new long[]{0x0000100000000000L});
    public static final BitSet FOLLOW_ruleLoop_in_ruleAttrComp4618 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_32_in_ruleAttrComp4638 = new BitSet(new long[]{0x0000001E00180010L});
    public static final BitSet FOLLOW_ruleDefAttr_in_ruleAttrComp4660 = new BitSet(new long[]{0x0000000080000000L});
    public static final BitSet FOLLOW_31_in_ruleAttrComp4671 = new BitSet(new long[]{0x0000D21F00182070L});
    public static final BitSet FOLLOW_ruleExpressionDep_in_ruleAttrComp4692 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDefAttr_in_entryRuleDefAttr4729 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDefAttr4739 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAttr_in_ruleDefAttr4785 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAttr_in_entryRuleAttr4819 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAttr4829 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSymOcc_in_ruleAttr4876 = new BitSet(new long[]{0x0000000200000000L});
    public static final BitSet FOLLOW_33_in_ruleAttr4888 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleAttrUseId_in_ruleAttr4909 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_33_in_ruleAttr4929 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleAttrUseId_in_ruleAttr4950 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAttrUseId_in_entryRuleAttrUseId4987 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAttrUseId4997 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleAttrUseId5038 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSymOcc_in_entryRuleSymOcc5078 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSymOcc5088 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSymbolId_in_ruleSymOcc5145 = new BitSet(new long[]{0x0000002000000002L});
    public static final BitSet FOLLOW_ruleIndex_in_ruleSymOcc5162 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_19_in_ruleSymOcc5182 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_20_in_ruleSymOcc5200 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_34_in_ruleSymOcc5218 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_35_in_ruleSymOcc5236 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_36_in_ruleSymOcc5254 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleIndex_in_entryRuleIndex5292 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleIndex5303 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_37_in_ruleIndex5341 = new BitSet(new long[]{0x0000D21F00182070L});
    public static final BitSet FOLLOW_ruleC_INTEGER_in_ruleIndex5363 = new BitSet(new long[]{0x0000004000000000L});
    public static final BitSet FOLLOW_38_in_ruleIndex5381 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSymbolId_in_entryRuleSymbolId5421 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSymbolId5431 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleSymbolId5472 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleExpressionDep_in_entryRuleExpressionDep5512 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleExpressionDep5522 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleExpression_in_ruleExpressionDep5569 = new BitSet(new long[]{0x00000C0000000002L});
    public static final BitSet FOLLOW_ruleDepClause_in_ruleExpressionDep5589 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleExpression_in_entryRuleExpression5626 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleExpression5636 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAttr_in_ruleExpression5692 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRhsAttrs_in_ruleExpression5719 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleExpression5743 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_39_in_ruleExpression5760 = new BitSet(new long[]{0x0000D31F00182070L});
    public static final BitSet FOLLOW_ruleParamsOpt_in_ruleExpression5781 = new BitSet(new long[]{0x0000010000000000L});
    public static final BitSet FOLLOW_40_in_ruleExpression5793 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRemoteExpression_in_ruleExpression5821 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSymbolRef_in_ruleExpression5848 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleExpression5865 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleC_FLOAT_in_ruleExpression5886 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleC_INTEGER_in_ruleExpression5907 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSymbolRef_in_entryRuleSymbolRef5943 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSymbolRef5953 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSymbolId_in_ruleSymbolRef6010 = new BitSet(new long[]{0x0000002000000002L});
    public static final BitSet FOLLOW_ruleIndex_in_ruleSymbolRef6027 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_13_in_ruleSymbolRef6048 = new BitSet(new long[]{0x0000002000000002L});
    public static final BitSet FOLLOW_ruleIndex_in_ruleSymbolRef6065 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRhsAttrs_in_entryRuleRhsAttrs6104 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleRhsAttrs6114 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_41_in_ruleRhsAttrs6151 = new BitSet(new long[]{0x0000000200000000L});
    public static final BitSet FOLLOW_33_in_ruleRhsAttrs6163 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleRhsAttrs6180 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDepClause_in_entryRuleDepClause6221 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDepClause6231 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_42_in_ruleDepClause6269 = new BitSet(new long[]{0x0000C29E00180010L});
    public static final BitSet FOLLOW_ruleDependence_in_ruleDepClause6291 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_43_in_ruleDepClause6310 = new BitSet(new long[]{0x0000C29E00180010L});
    public static final BitSet FOLLOW_ruleDependence_in_ruleDepClause6332 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDependence_in_entryRuleDependence6368 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDependence6378 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDepAttr_in_ruleDependence6425 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_39_in_ruleDependence6443 = new BitSet(new long[]{0x0000C21E00180010L});
    public static final BitSet FOLLOW_ruleDepAttrs_in_ruleDependence6465 = new BitSet(new long[]{0x0000010000000000L});
    public static final BitSet FOLLOW_40_in_ruleDependence6476 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDepAttrs_in_entryRuleDepAttrs6513 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDepAttrs6523 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDepAttr_in_ruleDepAttrs6569 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_18_in_ruleDepAttrs6582 = new BitSet(new long[]{0x0000C21E00180010L});
    public static final BitSet FOLLOW_ruleDepAttr_in_ruleDepAttrs6603 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_ruleDepAttr_in_entryRuleDepAttr6641 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDepAttr6651 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRemoteExpression_in_ruleDepAttr6698 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAttr_in_ruleDepAttr6725 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRhsAttrs_in_ruleDepAttr6752 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleParamsOpt_in_entryRuleParamsOpt6787 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleParamsOpt6797 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleParams_in_ruleParamsOpt6852 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleParams_in_entryRuleParams6889 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleParams6899 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleParam_in_ruleParams6945 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_18_in_ruleParams6958 = new BitSet(new long[]{0x0000D21F00182070L});
    public static final BitSet FOLLOW_ruleParam_in_ruleParams6979 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_ruleParam_in_entryRuleParam7017 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleParam7027 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleExpressionDep_in_ruleParam7073 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleLoop_in_entryRuleLoop7107 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleLoop7117 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_44_in_ruleLoop7154 = new BitSet(new long[]{0x0000D21F00182070L});
    public static final BitSet FOLLOW_ruleExpressionDep_in_ruleLoop7175 = new BitSet(new long[]{0x0000200000000000L});
    public static final BitSet FOLLOW_45_in_ruleLoop7187 = new BitSet(new long[]{0x0000001E00180010L});
    public static final BitSet FOLLOW_ruleAttr_in_ruleLoop7208 = new BitSet(new long[]{0x0000000080000000L});
    public static final BitSet FOLLOW_31_in_ruleLoop7220 = new BitSet(new long[]{0x0000D21F00182070L});
    public static final BitSet FOLLOW_ruleExpressionDep_in_ruleLoop7241 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRemoteExpression_in_entryRuleRemoteExpression7277 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleRemoteExpression7287 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_46_in_ruleRemoteExpression7325 = new BitSet(new long[]{0x0000008000000010L});
    public static final BitSet FOLLOW_ruleRemoteClause_in_ruleRemoteExpression7347 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSubtree_in_ruleRemoteExpression7376 = new BitSet(new long[]{0x0000800000000000L});
    public static final BitSet FOLLOW_47_in_ruleRemoteExpression7387 = new BitSet(new long[]{0x0000008000000010L});
    public static final BitSet FOLLOW_ruleRemoteClause_in_ruleRemoteExpression7408 = new BitSet(new long[]{0x0003000000000002L});
    public static final BitSet FOLLOW_ruleShield_in_ruleRemoteExpression7429 = new BitSet(new long[]{0x0001000000000002L});
    public static final BitSet FOLLOW_ruleExpandOpt_in_ruleRemoteExpression7451 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRemoteClause_in_entryRuleRemoteClause7489 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleRemoteClause7499 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRemoteAttr_in_ruleRemoteClause7546 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_39_in_ruleRemoteClause7564 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleRemoteAttrs_in_ruleRemoteClause7586 = new BitSet(new long[]{0x0000010000000000L});
    public static final BitSet FOLLOW_40_in_ruleRemoteClause7597 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRemoteAttrs_in_entryRuleRemoteAttrs7634 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleRemoteAttrs7644 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRemoteAttr_in_ruleRemoteAttrs7690 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_18_in_ruleRemoteAttrs7703 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleRemoteAttr_in_ruleRemoteAttrs7724 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_ruleRemoteAttr_in_entryRuleRemoteAttr7762 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleRemoteAttr7772 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSymbolId_in_ruleRemoteAttr7819 = new BitSet(new long[]{0x0000000200000000L});
    public static final BitSet FOLLOW_33_in_ruleRemoteAttr7830 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleAttrUseId_in_ruleRemoteAttr7851 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleExpandOpt_in_entryRuleExpandOpt7887 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleExpandOpt7897 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_48_in_ruleExpandOpt7934 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_39_in_ruleExpandOpt7946 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleTypeId_in_ruleExpandOpt7968 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleExpandOpt7979 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleExpandOpt7990 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleExpandOpt8001 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleExpandOpt8012 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleExpandOpt8023 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleExpandOpt8034 = new BitSet(new long[]{0x0000010000000000L});
    public static final BitSet FOLLOW_40_in_ruleExpandOpt8045 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSubtree_in_entryRuleSubtree8081 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSubtree8091 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSymOcc_in_ruleSubtree8146 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleShield_in_entryRuleShield8183 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleShield8193 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_49_in_ruleShield8230 = new BitSet(new long[]{0x0000008000000010L});
    public static final BitSet FOLLOW_ruleShieldClause_in_ruleShield8252 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleShieldClause_in_entryRuleShieldClause8287 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleShieldClause8297 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleShieldSym_in_ruleShieldClause8353 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_39_in_ruleShieldClause8372 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleShieldSyms_in_ruleShieldClause8393 = new BitSet(new long[]{0x0000010000000000L});
    public static final BitSet FOLLOW_40_in_ruleShieldClause8405 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_39_in_ruleShieldClause8425 = new BitSet(new long[]{0x0000010000000000L});
    public static final BitSet FOLLOW_40_in_ruleShieldClause8437 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleShieldSyms_in_entryRuleShieldSyms8475 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleShieldSyms8485 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleShieldSym_in_ruleShieldSyms8531 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_18_in_ruleShieldSyms8544 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleShieldSym_in_ruleShieldSyms8565 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_ruleShieldSym_in_entryRuleShieldSym8603 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleShieldSym8613 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSymbolId_in_ruleShieldSym8659 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSymCompSpec_in_entryRuleSymCompSpec8693 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSymCompSpec8703 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSymClass_in_ruleSymCompSpec8744 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleSymbolDefId_in_ruleSymCompSpec8765 = new BitSet(new long[]{0x0004000021000000L});
    public static final BitSet FOLLOW_ruleInheritOpt_in_ruleSymCompSpec8785 = new BitSet(new long[]{0x0000000021000000L});
    public static final BitSet FOLLOW_ruleCompPart_in_ruleSymCompSpec8807 = new BitSet(new long[]{0x0000000001000000L});
    public static final BitSet FOLLOW_24_in_ruleSymCompSpec8820 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleInheritOpt_in_entryRuleInheritOpt8856 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleInheritOpt8866 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_50_in_ruleInheritOpt8903 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleInheritSyms_in_ruleInheritOpt8925 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleInheritSyms_in_entryRuleInheritSyms8960 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleInheritSyms8970 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleInheritSym_in_ruleInheritSyms9016 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_18_in_ruleInheritSyms9029 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleInheritSym_in_ruleInheritSyms9050 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_ruleInheritSym_in_entryRuleInheritSym9088 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleInheritSym9098 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSymbolId_in_ruleInheritSym9144 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleC_INTEGER_in_entryRuleC_INTEGER9179 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleC_INTEGER9190 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_INT_in_ruleC_INTEGER9229 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleC_FLOAT_in_entryRuleC_FLOAT9274 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleC_FLOAT9285 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_INT_in_ruleC_FLOAT9325 = new BitSet(new long[]{0x0000000200000000L});
    public static final BitSet FOLLOW_33_in_ruleC_FLOAT9343 = new BitSet(new long[]{0x00000000000000C0L});
    public static final BitSet FOLLOW_RULE_EXT_INT_in_ruleC_FLOAT9359 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_INT_in_ruleC_FLOAT9385 = new BitSet(new long[]{0x0000000000000002L});

}